
初学Python时,最让人崩溃的往往不是逻辑有多复杂,而是——明明代码看起来没问题,运行时却报错。
今天我们就来聊聊Python代码书写时的那些硬规则,以及违反它们会引发什么样的报错。记住这些,能帮你省下大量调试时间。
缩进:Python的“命根子”
场景1:IndentationError
错误写法:
age = 18 if age >= 18: print("成年人") # 这一行没有缩进 |
运行结果:IndentationError: expected an indented block
错误原因:Python用缩进表示代码块。if语句下面的代码必须缩进,否则不知道它属于谁。
正确写法:
age = 18 if age >= 18: print("成年人") # 缩进4个空格 |
场景2:混用Tab和空格
错误写法:
if True: print("Hello") # 这一行用了4个空格 print("World") # 这一行用了Tab |
运行结果:TabError: inconsistent use of tabs and spaces in indentation
错误原因:Tab和空格混用。虽然看起来都是缩进,但在Python眼里它们是不同的。
解决方法:统一用4个空格。
冒号:不要忘记它
场景3:if语句漏了冒号
错误写法:
age = 18 if age >= 18 # 漏了冒号 print("成年人") |
运行结果:SyntaxError: invalid syntax
正确写法:
if age >= 18: # 冒号不能少 print("成年人") |
哪些地方需要冒号?
if语句后:if condition:
for循环后:for i in range(5):
while循环后:while condition:
函数定义后:def func():
else/elif后:else:、elif condition:
引号:成对出现
场景4:引号不匹配
错误写法:
name = "张三 # 只有左引号,没有右引号 print(name) |
运行结果:SyntaxError: EOL while scanning string literal
其中:EOL是End Of Line的意思——字符串还没结束就到行尾了。
正确写法:
name = "张三" # 两边引号完备 print(name) |
场景5:字符串里要加引号
错误写法:
message = "他说:"你好"" # 想输出:他说:"你好" |
这里有两个问题:外面的双引号和里面的双引号冲突了。
正确写法:
# 方法1:外面用单引号,里面用双引号 message = '他说:"你好"' # 方法2:外面用双引号,里面用转义符 message = "他说:\"你好\"" # 方法3:用三引号 message = """他说:"你好" """ |
括号:配对的艺术
场景6:括号不匹配
错误写法:
result = (5 + 3 * 2 # 只有左括号 print(result) |
运行结果:SyntaxError: unexpected EOF while parsing
EOF是End Of File——文件结束了,括号还没配对上。
正确写法:
result = (5 + 3 * 2) # 括号完备 print(result) |
场景7:函数调用漏括号
错误写法:
name = "张三" print name # print后面漏了括号 |
运行结果:SyntaxError: Missing parentheses in call to 'print'
正确写法:
变量命名:不能随心所欲
场景8:数字开头
错误写法:
2name = "张三" # 变量名以数字开头 |
运行结果:SyntaxError: invalid decimal literal
正确写法:
name = "张三" # 变量名不以数字开头 |
场景9:用了保留字
错误写法:
if = 10 # if是Python的保留字 class = "英语班" # class也是保留字 |
运行结果:SyntaxError: invalid syntax
Python保留字列表:
False, None, True, and, as, assert, async, await, break,
class, continue, def, del, elif, else, except, finally,
for, from, global, if, import, in, is, lambda, nonlocal,
not, or, pass, raise, return, try, while, with, yield
场景10:用了非法字符
错误写法:
my-name = "张三" # 变量名包含减号 |
运行结果:SyntaxError: cannot assign to operator
正确命名规则:
只能包含字母、数字、下划线
不能以数字开头
不能是保留字
区分大小写(age和Age不同)
运算符号:别写错了
场景11:赋值写成了等于
错误写法:
x = 5 if x = 5: # 应该用==,不是= print("x等于5") |
运行结果:SyntaxError: invalid syntax
区别:
=是赋值:把右边的值给左边
==是等于:判断两边是否相等
场景12:整除写反了
除法符号写法:
result = 5 // 2 # 这是整除,结果是2 result = 5 / 2 # 这是除法,结果是2.5 result = 5 \ 2 # 反斜杠?Python没有这个运算符 |
中文标点:看不见的敌人
场景13:用了中文逗号
错误写法:
fruits = ["苹果", "香蕉", "橙子"] # 用了中文逗号, |
运行结果:SyntaxError: invalid character ',' (U+FF0C)
场景14:用了中文引号
错误写法:
name = “张三” # 用了中文双引号 |
运行结果:SyntaxError: invalid character '“' (U+201C)
解决方法:写代码时一定要切换到英文输入法。中英文标点看起来很像,但Python只认英文标点。
常见错误速查表
| 错误信息 | 解决方法 | |
| 缩进错误 | 检查代码块是否缩进一致 | |
| Tab和空格混用 | 统一用4个空格 | |
| 语法错误 | 检查冒号、括号、引号、运算符 | |
| 变量未定义 | 检查变量名拼写 | |
| 类型错误 | 检查是否字符串和数字直接运算 | |
| 值错误 | 检查输入转换是否合法 | |
| 检查括号是否匹配 |
调试小技巧
1. 从第一行错误开始看:错误信息会告诉你哪行代码出问题,先看哪行。
2. 检查上一行:有时候错误是上一行引起的(比如漏了括号)。
3. 注释法:把怀疑出错的代码注释掉,看程序能不能运行。
4. print大法:在关键位置加print,输出变量值,看程序执行到哪里。
5. 用编辑器语法高亮:如果代码颜色不对,很可能有语法错误。
结束之前
这些书写规则,刚开始会觉得繁琐,写多了就成了肌肉记忆。
记住:Python的错误提示其实很友好,它会告诉你哪行错了、什么错。学会读错误信息,调试就会事半功倍。
下次遇到报错,不要慌,先看看它说什么——它可能已经告诉你答案了。
你在写代码时最常犯什么错误?欢迎在评论区分享你的“血泪史”。
动手试试吧
找出以下代码程序的错误:
age = 20 if age >= 18: print("成年人") print("可以上网") |
score = 85 if score >= 60 print("及格") else print("不及格") |
name = input("请输入姓名) if name = "张三" print("你好,张三") |
练习一:手动进制转换详解
答案:45
答案:101111
题目:将二进制数 11101101 转换为十六进制。
答案:ED
注意:十六进制中,10-15分别用A-F表示,不要写成数字。
题目:观察二进制数 1, 10, 11, 100, 101, 110, 111, 1000 分别对应十进制的哪些数字?你能发现什么规律?
解答:分别对应1-10。
1. bin(25) 输出什么?11001
int("1101", 2) 输出什么?13hex(255) 输出什么?0xff精彩回顾:
一起学Python(001):为什么文科生也要学Python?
一起学Python(002):计算机的“数字秘密”——0和1如何统治世界?
