本文目录导读:
- 语法错误(SyntaxError)
- 名称错误(NameError)
- 类型错误(TypeError)
- 索引错误(IndexError / KeyError)
- 值错误(ValueError)
- 属性错误(AttributeError)
- 导入错误(ImportError / ModuleNotFoundError)
- 文件与 I/O 错误(FileNotFoundError, PermissionError)
- 除以零错误(ZeroDivisionError)
- 递归深度超限(RecursionError)
- 断言错误(AssertionError)
- 内存/资源错误(MemoryError, OSError)
- 数据库/网络相关错误(连接超时、断线、锁等待)
- 自定义异常错误
- 日志排查建议
Python 报错日志是开发中不可避免的一部分,了解常见的案例有助于快速定位问题并提高代码质量,以下是几类经典的 Python 报错日志案例,按错误类型分类并附上典型场景、日志示例和解决思路。
语法错误(SyntaxError)
-
场景:代码写错,比如漏了冒号、括号不匹配、缩进不一致。
-
日志示例:
File "example.py", line 5 if x > 10 ^ SyntaxError: invalid syntax -
原因:
if语句后面缺少冒号 。 -
解决:检查报错行及前一行,补全标点或括号。
名称错误(NameError)
-
场景:使用了未定义的变量或函数。
-
日志示例:
Traceback (most recent call last): File "demo.py", line 3, in <module> print(result) NameError: name 'result' is not defined -
原因:变量
result尚未赋值就引用。 -
解决:检查变量是否拼写正确,或确保其已定义。
类型错误(TypeError)
-
场景:对不兼容的类型进行操作(如字符串 + 数字、调用非函数对象)。
-
日志示例 1:
TypeError: can only concatenate str (not "int") to str- 原因:
'hello' + 123 - 解决:将整数转为字符串
str(123)。
- 原因:
-
日志示例 2:
TypeError: 'list' object is not callable- 原因:变量名与内置函数或类名冲突,如
list = [1,2]; list() - 解决:避免覆盖内置名称。
- 原因:变量名与内置函数或类名冲突,如
索引错误(IndexError / KeyError)
-
场景:访问不存在的列表元素或字典键。
-
日志示例:
IndexError: list index out of range- 原因:列表只有3个元素,却访问
list[5]。 - 解决:先检查列表长度
len(lst),或使用try/except。
- 原因:列表只有3个元素,却访问
-
日志示例:
KeyError: 'age'- 原因:字典中不存在键
'age'。 - 解决:使用
dict.get('age', default_value)或先检查if 'age' in dict。
- 原因:字典中不存在键
值错误(ValueError)
-
场景:函数参数类型正确但值不合理,如转换数字到字符串失败。
-
日志示例:
ValueError: invalid literal for int() with base 10: 'abc'- 原因:
int('abc')无法解析为非数字字符串。 - 解决:确认输入可转换,或使用
try/except捕获异常。
- 原因:
属性错误(AttributeError)
-
场景:对象没有某个属性或方法。
-
日志示例:
AttributeError: 'NoneType' object has no attribute 'append'- 原因:变量值变成了
None,然后调用.append()。 - 解决:检查变量是否被正确赋值,或增加非空判断。
- 原因:变量值变成了
导入错误(ImportError / ModuleNotFoundError)
-
场景:模块不存在、路径错误或安装缺失。
-
日志示例:
ModuleNotFoundError: No module named 'requests'- 原因:未安装
requests库。 - 解决:执行
pip install requests。
- 原因:未安装
-
日志示例:
ImportError: cannot import name 'some_func' from 'mymodule'- 原因:模块内没有该函数,或循环导入。
- 解决:检查拼写或重构模块结构。
文件与 I/O 错误(FileNotFoundError, PermissionError)
-
场景:文件不存在、路径不对、无权限。
-
日志示例:
FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'- 原因:文件不存在或路径错误。
- 解决:确保文件路径正确,或使用
os.path.exists()检查。
-
日志示例:
PermissionError: [Errno 13] Permission denied: '/etc/config'- 原因:进程无读写权限。
- 解决:修改文件权限或以更高权限运行。
除以零错误(ZeroDivisionError)
-
场景:除数为零。
-
日志示例:
ZeroDivisionError: division by zero- 原因:
result = 1 / 0 - 解决:在计算前检查分母是否为0。
- 原因:
递归深度超限(RecursionError)
-
场景:递归函数没有终止条件或递归过深。
-
日志示例:
RecursionError: maximum recursion depth exceeded while calling a Python object- 原因:递归函数未正确返回,或数据量大导致栈溢出。
- 解决:添加递归终止条件,或改用循环方式实现。
断言错误(AssertionError)
-
场景:
assert语句条件为假,常用于调试。 -
日志示例:
AssertionError- 原因:
assert x > 0但x为负数。 - 解决:检查断言逻辑,确保条件成立或移除无效断言。
- 原因:
内存/资源错误(MemoryError, OSError)
-
场景:加载超大数据、文件句柄用尽、线程/进程创建失败。
-
日志示例:
MemoryError- 原因:一次性读取大文件
f.read(),内存不足。 - 解决:改用迭代或分块读取,如
for line in f。
- 原因:一次性读取大文件
-
日志示例:
OSError: [Errno 24] Too many open files- 原因:未关闭文件句柄,超出系统限制。
- 解决:确保使用
with open(...) as f自动关闭,或增加系统限制。
数据库/网络相关错误(连接超时、断线、锁等待)
-
场景:数据库查询超时、网络断开、死锁。
-
日志示例(MySQL):
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")- 原因:数据库服务未启动或端口错误。
- 解决:检查 MySQL 服务状态、防火墙、连接字符串。
自定义异常错误
-
场景:程序主动抛出自定义异常。
-
日志示例:
__main__.ValidationError: 'age must be integer'- 原因:自定义校验失败。
- 解决:根据业务逻辑修正输入。
日志排查建议
- 定位行号:日志中的
File "xxx.py", line N是核心线索。 - 看异常类型:如
TypeError、ValueError可快速缩小范围。 - 检查输入数据:多数运行时错误源于数据不符合预期。
- 使用日志模块:推荐
logging代替print,便于分级和持久化。 - 启用回溯:
traceback模块或异常对象的exc_info可打印完整调用链。
遇到报错时,建议先理解异常类型和行号,再结合业务逻辑分析数据流,大多数问题都能快速解决。
标签: Python模块导入错误