Python报错信息归类以及处理
Python 的错误和异常可以分为多个类别,了解这些类别有助于更好地调试和处理错误。以下是 Python 中常见报错信息的归类和分析。在代码执行前被解析器捕获的错误,通常是由于代码不符合 Python 语法规则。常见子类:示例:2. 异常 (Exceptions)程序运行时发生的错误,即使语法正确也可能发生。:访问对象不存在的属性2.2.2 与索引和键相关:序列下标超出范围:字典中不存在的键2.2
·
ʕ ᵔᴥᵔ ʔ
Python 的错误和异常可以分为多个类别,了解这些类别有助于更好地调试和处理错误。以下是 Python 中常见报错信息的归类和分析。
1. 语法错误 (SyntaxError)
在代码执行前被解析器捕获的错误,通常是由于代码不符合 Python 语法规则。
常见子类:
IndentationError:缩进错误TabError:Tab 和空格混用
示例:
# 缺少冒号
if True
print("Hello") # SyntaxError: invalid syntax
# 缩进错误
def func():
print("Hello") # IndentationError: expected an indented block
2. 异常 (Exceptions)
程序运行时发生的错误,即使语法正确也可能发生。
2.1 内置异常基类
BaseException:所有异常的基类Exception:所有非系统退出异常的基类SystemExit:解释器请求退出KeyboardInterrupt:用户中断执行(通常是 Ctrl+C)
2.2 常见内置异常
2.2.1 与变量和属性相关
NameError:访问未声明的变量print(undefined_var) # NameError: name 'undefined_var' is not definedAttributeError:访问对象不存在的属性"hello".nonexistent_method() # AttributeError: 'str' object has no attribute 'nonexistent_method'
2.2.2 与索引和键相关
IndexError:序列下标超出范围lst = [1, 2, 3] print(lst[3]) # IndexError: list index out of rangeKeyError:字典中不存在的键d = {'a': 1} print(d['b']) # KeyError: 'b'
2.2.3 与类型相关
TypeError:操作或函数应用于不适当类型的对象1 + "1" # TypeError: unsupported operand type(s) for +: 'int' and 'str'ValueError:操作或函数接收到类型正确但值不合适的参数int("abc") # ValueError: invalid literal for int() with base 10: 'abc'
2.2.4 与输入/输出相关
FileNotFoundError:请求的文件或目录不存在open("nonexistent.txt") # FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent.txt'PermissionError:没有足够的权限执行操作IsADirectoryError:预期是文件但实际是目录NotADirectoryError:预期是目录但实际是文件
2.2.5 与数学运算相关
ZeroDivisionError:除数为零1 / 0 # ZeroDivisionError: division by zeroOverflowError:数值运算结果太大无法表示FloatingPointError:浮点运算失败
2.2.6 与导入相关
ImportError:导入模块或对象失败ModuleNotFoundError:找不到模块 (Python 3.6+)
2.2.7 与迭代和生成器相关
StopIteration:迭代器没有更多的值GeneratorExit:生成器关闭时触发
2.2.8 与操作系统相关
OSError:操作系统错误,包含许多子类如:FileExistsError:创建已存在的文件或目录TimeoutError:操作超时
2.2.9 与断言相关
AssertionError:assert 语句失败
2.2.10 与多线程/多进程相关
RuntimeError:一般运行时错误RecursionError:递归过深 (Python 3.5+)NotImplementedError:抽象方法未实现
3. 异常处理最佳实践
3.1 基本异常处理结构
try:
# 可能引发异常的代码
risky_operation()
except SpecificError as e:
# 处理特定异常
print(f"发生特定错误: {e}")
except (ErrorType1, ErrorType2) as e:
# 处理多种异常
print(f"发生错误: {e}")
except Exception as e:
# 处理所有其他异常
print(f"发生未知错误: {e}")
else:
# 没有异常时执行
print("操作成功")
finally:
# 无论是否发生异常都会执行
print("清理操作")
3.2 异常处理建议
- 具体优于宽泛:先捕获具体异常,再捕获更一般的异常
- 不要静默所有异常:至少记录异常信息
- 合理使用 finally:释放资源等清理操作
- 自定义异常:为应用特定错误创建自定义异常类
- 异常链:Python 3 支持
raise ... from保留原始异常
3.3 自定义异常示例
class MyAppError(Exception):
"""应用基础异常类"""
pass
class InvalidInputError(MyAppError):
"""输入无效异常"""
def __init__(self, input_value, message="无效输入"):
self.input_value = input_value
self.message = message
super().__init__(f"{message}: {input_value}")
def process_input(value):
if not value.isdigit():
raise InvalidInputError(value)
return int(value)
try:
process_input("abc")
except InvalidInputError as e:
print(f"错误: {e}, 输入值: {e.input_value}")
4. 常见错误排查技巧
-
阅读完整错误信息:Python 错误信息通常包含:
- 错误类型
- 错误描述
- 错误发生的位置(文件和行号)
- 调用栈跟踪(Traceback)
-
使用调试工具:
print调试logging模块pdb调试器- IDE 的调试功能
-
检查常见陷阱:
- 变量名拼写错误
- 缩进问题
- 导入循环
- 可变默认参数
- 整数除法(Python 2 和 3 不同)

更多推荐




所有评论(0)