Python 错误代码
Python 错误代码是 Python 在程序执行过程中遇到意外情况时引发的异常和错误信号集合。理解这些错误代码对于高级开发人员至关重要,它能够帮助精确调试、实现健壮的错误处理,并提高软件可维护性。在软件开发中,当代码违反语法规则、数据类型不匹配、资源缺失或逻辑错误时,错误就会出现。常见的内置异常包括 SyntaxError
、TypeError
和 KeyError
,此外开发者还可以自定义异常以处理特定应用场景。通过掌握 Python 错误代码,开发者可以快速定位程序故障的根本原因,使用 try/except
块实施有效的异常处理,并为生产环境记录有用的诊断信息。这些知识在后端开发中尤为重要,因为未处理的异常可能导致服务中断、数据损坏或安全漏洞。本参考文档将带领读者全面了解常见 Python 错误、触发条件、调试技巧以及最佳异常管理实践,帮助构建稳定、高效的后端应用程序。
在一个后端服务中,程序可能会读取用户输入、处理文件并与数据库交互。此过程中可能出现 FileNotFoundError
、ValueError
或 ZeroDivisionError
等错误。正确的错误处理能够确保程序在出现意外情况时仍能平稳运行。例如,可以将可能失败的操作放入 try
块中,而 except
块捕获特定异常并进行处理。通过使用多个 except
块,开发者可以针对不同错误类型制定不同的处理策略、记录调试信息,并提供备用机制。同时,finally
块可以确保关键资源如文件句柄或数据库连接在无论是否发生错误的情况下都能正确关闭。此类模式不仅防止程序崩溃,还能提高系统的可靠性和可维护性。在实际后端系统中,良好的错误管理对系统稳定性、性能及用户信任至关重要。
Example
pythondef process_data():
try:
# NameError: 使用未定义变量
print(undefined_variable)
# ZeroDivisionError: 除以零
result = 10 / 0
# ValueError: 无效类型转换
number = int("abc")
# FileNotFoundError: 文件不存在
with open("non_existent_file.txt", "r") as f:
content = f.read()
# AttributeError: 调用不存在的方法
[].appendx(1)
except NameError as ne:
print(f"捕获 NameError: {ne}")
except ZeroDivisionError as zde:
print(f"捕获 ZeroDivisionError: {zde}")
except ValueError as ve:
print(f"捕获 ValueError: {ve}")
except FileNotFoundError as fe:
print(f"捕获 FileNotFoundError: {fe}")
except AttributeError as ae:
print(f"捕获 AttributeError: {ae}")
except Exception as e:
print(f"捕获通用异常: {e}")
finally:
print("执行清理操作(如关闭文件或数据库连接)")
process_data()
📊 Comprehensive Reference
Error | Description | When It Occurs | Example | Notes |
---|---|---|---|---|
SyntaxError | 语法错误 | Python 代码无效 | eval('x === 2') |
编译阶段检测 |
IndentationError | 缩进错误 | 缩进不一致 | if True:\nprint("Hi") |
SyntaxError 子类 |
TabError | 制表符混用 | Tab 和空格混用 | <tab> <space> print("Hi") |
保持缩进一致可避免 |
NameError | 变量未定义 | 使用未定义变量 | print(x) |
调试中常见 |
TypeError | 类型错误 | 操作类型不匹配 | 5 + "5" |
动态类型编程中常见 |
ValueError | 值错误 | 操作值无效 | int("abc") |
输入需校验 |
IndexError | 索引错误 | 列表索引越界 | lst = []; lst[1] |
访问前检查长度 |
KeyError | 键错误 | 访问不存在字典键 | d = {}; d['x'] |
可用 dict.get() 避免 |
AttributeError | 属性错误 | 对象无此属性 | [].appendx(1) |
方法名错误常见 |
ZeroDivisionError | 除零错误 | 除数为零 | 10 / 0 |
计算前需检查除数 |
ImportError | 导入错误 | 模块不存在 | import non_module |
确保模块存在 |
ModuleNotFoundError | 模块未找到 | 模块不存在 | import non_existent_module |
ImportError 子类 |
FileNotFoundError | 文件未找到 | 打开不存在的文件 | open("nofile.txt") |
检查文件路径 |
IsADirectoryError | 期望文件却是目录 | open("folder") |
操作系统相关 | |
NotADirectoryError | 期望目录却是文件 | os.listdir("file.txt") |
操作系统相关 | |
PermissionError | 权限错误 | 文件操作权限不足 | open("/root/file") |
检查用户权限 |
OSError | 操作系统错误 | 操作系统相关问题 | os.remove("/root/file") |
多个错误的基类 |
OverflowError | 溢出错误 | 数值超过范围 | 2.0**10000 |
Python 3 中较少 |
RecursionError | 递归深度超限 | 递归调用过深 | def f(): f(); f() |
可通过 sys.setrecursionlimit() 调整 |
MemoryError | 内存不足 | 分配大对象失败 | a = 'a' * 10**10 |
依赖系统内存 |
StopIteration | 迭代器耗尽 | 对空迭代器调用 next | next(iter([])) |
自定义迭代器常见 |
AssertionError | 断言失败 | assert False |
用于条件检查 | |
FloatingPointError | 浮点错误 | 无效浮点运算 | numpy.seterr(all='raise') |
在 numpy 中常见 |
UnicodeError | 编码/解码错误 | "ü".encode("ascii") |
检查编码格式 | |
UnicodeDecodeError | 解码错误 | b'\xff'.decode('utf-8') |
文件读取常见 | |
UnicodeEncodeError | 编码错误 | "ü".encode("ascii") |
检查编码格式 | |
RecursionWarning | 递归警告 | 递归过深 | import warnings |
非致命警告 |
DeprecationWarning | 弃用警告 | 使用旧功能 | warnings.warn("deprecated") |
帮助迁移 |
RuntimeWarning | 运行时警告 | 潜在运行问题 | import warnings |
非致命警告 |
FutureWarning | 未来警告 | 功能即将改变 | warnings.warn("future") |
提前兼容 |
UserWarning | 用户警告 | 自定义警告 | warnings.warn("user") |
非致命 |
PendingDeprecationWarning | 待弃用警告 | 功能可能弃用 | warnings.warn("pending") |
不常用 |
ResourceWarning | 资源未释放 | 文件未关闭 | open("file") |
Python 3+ |
ArithmeticError | 算术错误 | 算术运算失败 | int("x")/0 |
多个算术错误基类 |
BufferError | 缓冲区错误 | 无效缓冲操作 | memoryview(b'').release() |
罕见 |
ConnectionError | 连接错误 | 网络连接失败 | requests.get("bad_url") |
网络错误基类 |
BrokenPipeError | 管道破裂 | 写入已关闭管道 | os.write(fd, b'data') |
Unix 系统 |
ChildProcessError | 子进程错误 | 子进程失败 | os.waitpid(-1) |
罕见 |
EOFError | 文件结束错误 | 输入结束 | input() EOF |
空输入触发 |
EnvironmentError | 环境错误 | 系统环境问题 | os.remove("/root/file") |
OSError 基类 |
GeneratorExit | 生成器退出 | gen.close() |
生成器内部使用 | |
IOError | 输入输出错误 | 文件或 I/O 操作失败 | open("/root/file") |
Python 3 中已合并到 OSError |
InterruptedError | 中断错误 | 系统调用被中断 | os.read(fd, 0) |
Unix 系统 |
LookupError | 查找错误 | 查找操作失败 | d['x'] |
基类 |
ReferenceError | 引用错误 | 弱引用失效 | import weakref |
罕见 |
RuntimeError | 运行时错误 | raise RuntimeError() |
通用运行时错误 | |
StopAsyncIteration | 异步迭代结束 | async for |
Python 3.5+ | |
SyntaxWarning | 语法警告 | 可疑语法 | warnings.warn("syntax") |
不会中断程序 |
SystemError | 系统错误 | Python 内部错误 | sys._getframe(0) |
罕见 |
SystemExit | 系统退出 | 调用 sys.exit() | 退出程序 | |
TimeoutError | 超时错误 | 操作超时 | socket.settimeout() |
网络或系统调用 |
UnboundLocalError | 局部变量未绑定 | 在赋值前引用局部变量 | x=1; def f(): print(x); x=2 |
NameError 子类 |
📊 Complete Properties Reference
Error | Exception Type | Default Behavior | Description | Compatibility |
---|---|---|---|---|
SyntaxError | Exception | 程序停止 | 语法错误 | 所有 Python 版本 |
IndentationError | SyntaxError | 程序停止 | 缩进错误 | 所有 Python 版本 |
TabError | IndentationError | 程序停止 | Tab 与空格混用 | 所有 Python 版本 |
NameError | Exception | 程序停止 | 变量未定义 | 所有 Python 版本 |
TypeError | Exception | 程序停止 | 类型错误 | 所有 Python 版本 |
ValueError | Exception | 程序停止 | 值错误 | 所有 Python 版本 |
IndexError | Exception | 程序停止 | 索引越界 | 所有 Python 版本 |
KeyError | Exception | 程序停止 | 键不存在 | 所有 Python 版本 |
AttributeError | Exception | 程序停止 | 属性或方法不存在 | 所有 Python 版本 |
ZeroDivisionError | ArithmeticError | 程序停止 | 除以零 | 所有 Python 版本 |
ImportError | Exception | 程序停止 | 模块不存在 | 所有 Python 版本 |
ModuleNotFoundError | ImportError | 程序停止 | 模块不存在 | Python 3.6+ |
FileNotFoundError | OSError | 程序停止 | 文件不存在 | Python 3+ |
IsADirectoryError | OSError | 程序停止 | 期望文件却是目录 | Python 3+ |
NotADirectoryError | OSError | 程序停止 | 期望目录却是文件 | Python 3+ |
PermissionError | OSError | 程序停止 | 权限不足 | Python 3+ |
OSError | Exception | 程序停止 | 操作系统错误 | 所有 Python 版本 |
OverflowError | ArithmeticError | 程序停止 | 数值溢出 | 所有 Python 版本 |
RecursionError | RuntimeError | 程序停止 | 递归深度超限 | Python 3+ |
MemoryError | Exception | 程序停止 | 内存不足 | 所有 Python 版本 |
StopIteration | Exception | 程序停止 | 迭代器耗尽 | 所有 Python 版本 |
AssertionError | Exception | 程序停止 | 断言失败 | 所有 Python 版本 |
FloatingPointError | ArithmeticError | 程序停止 | 浮点错误 | 所有 Python 版本 |
UnicodeError | ValueError | 程序停止 | 编码/解码错误 | 所有 Python 版本 |
UnicodeDecodeError | UnicodeError | 程序停止 | 解码错误 | 所有 Python 版本 |
UnicodeEncodeError | UnicodeError | 程序停止 | 编码错误 | 所有 Python 版本 |
RecursionWarning | Warning | 程序继续 | 递归警告 | 所有 Python 版本 |
DeprecationWarning | Warning | 程序继续 | 弃用警告 | 所有 Python 版本 |
RuntimeWarning | Warning | 程序继续 | 运行时警告 | 所有 Python 版本 |
FutureWarning | Warning | 程序继续 | 未来警告 | 所有 Python 版本 |
UserWarning | Warning | 程序继续 | 用户警告 | 所有 Python 版本 |
PendingDeprecationWarning | Warning | 程序继续 | 待弃用警告 | 所有 Python 版本 |
ResourceWarning | Warning | 程序继续 | 资源未释放 | Python 3+ |
ArithmeticError | Exception | 程序停止 | 算术错误 | 所有 Python 版本 |
BufferError | Exception | 程序停止 | 缓冲区错误 | 所有 Python 版本 |
ConnectionError | OSError | 程序停止 | 连接错误 | Python 3+ |
BrokenPipeError | OSError | 程序停止 | 管道破裂 | Python 3+ |
ChildProcessError | OSError | 程序停止 | 子进程错误 | Python 3+ |
EOFError | Exception | 程序停止 | 文件结束错误 | 所有 Python 版本 |
EnvironmentError | OSError | 程序停止 | 环境错误 | Python 3+ |
GeneratorExit | Exception | 程序停止 | 生成器退出 | 所有 Python 版本 |
IOError | OSError | 程序停止 | 输入输出错误 | Python 3+ |
InterruptedError | OSError | 程序停止 | 中断错误 | Python 3+ |
LookupError | Exception | 程序停止 | 查找错误 | 所有 Python 版本 |
ReferenceError | Exception | 程序停止 | 引用错误 | Python 3+ |
RuntimeError | Exception | 程序停止 | 运行时错误 | 所有 Python 版本 |
StopAsyncIteration | Exception | 程序停止 | 异步迭代结束 | Python 3.5+ |
SyntaxWarning | Warning | 程序继续 | 语法警告 | 所有 Python 版本 |
SystemError | Exception | 程序停止 | 系统错误 | 所有 Python 版本 |
SystemExit | Exception | 程序停止 | 系统退出 | 所有 Python 版本 |
TimeoutError | OSError | 程序停止 | 超时错误 | Python 3+ |
UnboundLocalError | NameError | 程序停止 | 局部变量未绑定 | Python 3+ |
ZeroDivisionError | ArithmeticError | 程序停止 | 除以零 | 所有 Python 版本 |
🧠 测试您的知识
Test
Challenge yourself with this interactive quiz and see how well you understand the topic
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部