python常见错误有四类:变量名拼写或大小写错误致nameerror;空格与tab混用引发indentationerror;遍历列表/字典时修改导致漏删;可变对象作函数默认参数造成意外累积。

变量名写错或大小写混淆
Python 区分大小写,name 和 Name 是两个完全不同的变量。初学者常因拼写错误(比如把 user_name 写成 username)或大小写不一致(如定义了 count 却调用 Count),导致 NameError: name 'xxx' is not defined。这类错误不会在写代码时被发现,只有运行才报错,排查起来特别耗时。
建议:
- 定义变量后立刻在下一行打印验证,比如 print(user_name);
- 使用带语法检查的编辑器(如 VS Code、PyCharm),它们能实时标出未定义变量;
- 坚持命名规范,比如用小写字母+下划线(snake_case),避免混用驼峰或大小写切换。
缩进错误:空格和 Tab 混用
Python 用缩进来表示代码块,不是靠大括号。但空格和 Tab 在视觉上几乎一样,一旦混用,就会触发 IndentationError 或更隐蔽的 TabError。尤其从网页复制代码、或在不同编辑器间切换时,很容易中招。
建议:
- 在编辑器中开启“显示空白字符”功能,一眼看出是空格还是 Tab;
- 统一设置为“按 Tab 键插入 4 个空格”,禁用真实 Tab 字符;
- 运行前用 python -m py_compile your_file.py 提前检查缩进问题。
修改列表/字典时还在遍历它
边遍历边增删元素,会导致漏掉某些项或索引错乱。例如:
nums = [1, 2, 3, 4]<br> for n in nums:<br> if n % 2 == 0:<br> nums.remove(n)
这段代码本想删掉所有偶数,结果只删了 2 和 4 中的一个——因为删除后列表变短,后续元素前移,但循环的内部索引仍往前走,直接跳过了下一个元素。
立即学习“Python免费学习笔记(深入)”;
建议:
- 需要筛选时,用列表推导式:nums = [n for n in nums if n % 2 != 0];
- 必须原地修改时,反向遍历:for i in range(len(nums)-1, -1, -1):;
- 或先收集要删的值,再统一处理:to_remove = [n for n in nums if n % 2 == 0]; [nums.remove(x) for x in to_remove]。
可变对象当默认参数
函数默认参数在定义时只计算一次。如果用了可变对象(如列表、字典)作默认值,多次调用函数会共用同一个对象,造成“意外累积”:
def add_item(item, lst=[]):<br>
lst.append(item)<br>
return lst<br>
print(add_item("a")) # ['a']<br>
print(add_item("b")) # ['a', 'b'] ← 问题出现!
第二次调用时,lst 并不是新列表,而是上次用过的那个。
建议:
- 默认参数用 None,再在函数内初始化:
def add_item(item, lst=None):<br> if lst is None:<br> lst = [];
- 记住口诀:“默认参数别用可变对象”;
- 看到函数有可变默认值,第一反应就是怀疑它是否线程安全或可重入。









