文件编码问题:中文乱码不是玄学
刚写完一段代码,运行时突然弹出一串红字,提示编码错误。这种情况在处理包含中文的文件时特别常见。Python 解释器默认使用 UTF-8 编码读取源码,但如果你的编辑器保存成了 GBK 或其他格式,就会报错。
解决办法是在文件开头显式声明编码:
# -*- coding: utf-8 -*-或者干脆统一用 UTF-8 保存所有文件,避免来回折腾。
缩进错误 IndentationError:空格和 Tab 的战争
写 Python 最容易栽跟头的就是缩进。明明看着对齐了,一运行就报 IndentationError: unexpected indent。这通常是因为空格和 Tab 混用了。
很多编辑器默认用 Tab 缩进,但有些会自动转成空格。建议统一设置为 4 个空格,并在编辑器里开启“显示空白字符”功能,一眼就能看出哪里混了。
NameError:变量还没出生就被调用
运行代码时报错 NameError: name 'x' is not defined,说明你在定义之前就用了这个变量。比如把函数调用写在了函数定义前面,或者拼错了变量名。
有个经典例子:
print(count)
count = 1这段代码一定会崩。记住:先有蛋(定义),才有鸡(使用)。
SyntaxError:少了个冒号也能卡住
写 if、for、while 后面忘了加冒号,是新手高频失误。别笑,老手赶 deadline 时也常犯。
if x == 1
print('等于1')上面这段代码会报 SyntaxError: invalid syntax,因为 if 条件后缺了冒号。这种错误解释器能定位到行,仔细看提示就行。
ModuleNotFoundError:模块找不到去哪找?
导入第三方库时报错 ModuleNotFoundError: No module named 'requests',说明没装这个包。可能是虚拟环境搞混了,或者 pip 装到了另一个 Python 版本下。
可以用命令确认是否真的装了:
pip list | grep requests如果列表里没有,那就乖乖重装。如果是多版本共存的情况,记得用 python -m pip install 明确指定解释器。
版本不兼容:旧代码跑不动新解释器
把项目从 Python 2 迁移到 Python 3 时,print 变成函数、除法行为改变、字符串和字节差异等问题全冒出来。比如这段代码在 Python 3 里直接失效:
print 'hello'必须改成带括号的函数调用形式。建议新项目一律用 Python 3.7+,老项目迁移前先跑一遍 2to3 工具辅助转换。
路径问题:相对导入总出错
在一个包里做相对导入时,比如 from .utils import helper,直接运行该模块会报错。因为解释器没把它当包的一部分来加载。
正确做法是从上层目录以模块方式运行:
python -m mypackage.mymodule而不是直接 python mymodule.py。这点容易忽略,尤其在调试单个文件时。