智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

解释器常见错误汇总:这些坑你踩过几个?

文件编码问题:中文乱码不是玄学

刚写完一段代码,运行时突然弹出一串红字,提示编码错误。这种情况在处理包含中文的文件时特别常见。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。这点容易忽略,尤其在调试单个文件时。