Python报错日志案例有哪些?

wen python案例 1

本文目录导读:

  1. 语法错误(SyntaxError)
  2. 名称错误(NameError)
  3. 类型错误(TypeError)
  4. 索引错误(IndexError / KeyError)
  5. 值错误(ValueError)
  6. 属性错误(AttributeError)
  7. 导入错误(ImportError / ModuleNotFoundError)
  8. 文件与 I/O 错误(FileNotFoundError, PermissionError)
  9. 除以零错误(ZeroDivisionError)
  10. 递归深度超限(RecursionError)
  11. 断言错误(AssertionError)
  12. 内存/资源错误(MemoryError, OSError)
  13. 数据库/网络相关错误(连接超时、断线、锁等待)
  14. 自定义异常错误
  15. 日志排查建议

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
  • 日志示例

    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 > 0x 为负数。
    • 解决:检查断言逻辑,确保条件成立或移除无效断言。

内存/资源错误(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'
    • 原因:自定义校验失败。
    • 解决:根据业务逻辑修正输入。

日志排查建议

  1. 定位行号:日志中的 File "xxx.py", line N 是核心线索。
  2. 看异常类型:如 TypeErrorValueError 可快速缩小范围。
  3. 检查输入数据:多数运行时错误源于数据不符合预期。
  4. 使用日志模块:推荐 logging 代替 print,便于分级和持久化。
  5. 启用回溯traceback 模块或异常对象的 exc_info 可打印完整调用链。

遇到报错时,建议先理解异常类型和行号,再结合业务逻辑分析数据流,大多数问题都能快速解决。

标签: Python模块导入错误

抱歉,评论功能暂时关闭!