精通 Python 错误与内置异常
Python 错误与内置异常
了解 Python 如何发出问题信号、语法错误与运行时错误的区别,以及如何自信处理内置异常。
视频:Python 异常处理
运行 Python 程序时,若遇到未处理错误,解释器会立即停止执行。错误大致分两类:
- 语法错误——解析阶段检测到的问题。
- 逻辑错误(异常)——代码执行时出现的问题。
Python 语法错误
源代码违反 Python 语法规则时发生语法错误。错误消息中用插入符 (^) 指向确切位置。
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
此例中 if 语句缺少冒号 (:) 触发 SyntaxError。
Python 逻辑错误(异常)
逻辑错误或异常仅在代码通过语法检查后出现。常见例子:
- 除以零(
ZeroDivisionError) - 打开不存在的文件(
FileNotFoundError) - 导入不可用模块(
ImportError)
异常抛出时,Python 创建异常对象。若未处理,会打印回溯,显示调用栈和失败原因。
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
Python 内置异常
Python 解释器引发大量内置异常以指示不同失败条件。可用以下片段列出:
print(dir(locals()['__builtins__']))
以下是常见内置异常及触发情况的简明参考:
| 异常 | 错误原因 |
|---|---|
AssertionError | assert 语句失败时引发 |
AttributeError | 属性赋值或引用失败时引发 |
EOFError | input() 遇到文件结束条件时引发 |
FloatingPointError | 浮点运算失败时引发 |
GeneratorExit | 生成器 close() 方法被调用时引发 |
ImportError | 导入模块未找到时引发 |
IndexError | 序列索引越界时引发 |
KeyError | 字典中键缺失时引发 |
KeyboardInterrupt | 用户按 Ctrl+C 或 Delete 时引发 |
MemoryError | 操作超出可用内存时引发 |
NameError | 变量在局部或全局作用域未找到时引发 |
NotImplementedError | 抽象方法缺乏实现时引发 |
OSError | 系统相关错误(如文件 I/O)引发 |
OverflowError | 算术结果过大无法表示时引发 |
ReferenceError | 弱引用代理垃圾回收对象时引发 |
RuntimeError | 不适合其他类别的错误引发 |
StopIteration | next() 迭代器耗尽时引发 |
SyntaxError | 解析器遇到无效语法时引发 |
IndentationError | 缩进不正确时引发 |
TabError | 缩进混用制表符和空格不一致时引发 |
SystemError | 解释器检测到内部错误时引发 |
SystemExit | sys.exit() 引发 |
TypeError | 操作或函数收到不当类型对象时引发 |
UnboundLocalError | 局部变量赋值前被引用时引发 |
UnicodeError | Unicode 相关编码或解码错误引发 |
UnicodeEncodeError | Unicode 编码错误时引发 |
UnicodeDecodeError | Unicode 解码错误时引发 |
UnicodeTranslateError | Unicode 转换错误时引发 |
ValueError | 函数收到正确类型但不当值的参数时引发 |
ZeroDivisionError | 除法或取模运算除数为零时引发 |
若需更细粒度控制,Python 允许定义自定义异常类。详见 Python 用户定义异常。
异常处理用 try、except、finally 块直观实现。深入请参考 Python try、except 和 finally 语句。
Python