• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Python中的异常类型

Python 异常类型大全

Python 提供了丰富的内置异常类型,用于处理各种运行时错误。以下是按照层次结构组织的常用异常类型:

异常层次结构概览

BaseException
 ├── KeyboardInterrupt
 ├── SystemExit
 ├── GeneratorExit
 └── Exception
      ├── ArithmeticError
      │    ├── FloatingPointError
      │    ├── OverflowError
      │    └── ZeroDivisionError
      ├── AssertionError
      ├── AttributeError
      ├── BufferError
      ├── EOFError
      ├── ImportError
      │    └── ModuleNotFoundError
      ├── LookupError
      │    ├── IndexError
      │    └── KeyError
      ├── MemoryError
      ├── NameError
      │    └── UnboundLocalError
      ├── OSError
      │    ├── BlockingIOError
      │    ├── ChildProcessError
      │    ├── ConnectionError
      │    │    ├── BrokenPipeError
      │    │    ├── ConnectionAbortedError
      │    │    ├── ConnectionRefusedError
      │    │    └── ConnectionResetError
      │    ├── FileExistsError
      │    ├── FileNotFoundError
      │    ├── InterruptedError
      │    ├── IsADirectoryError
      │    ├── NotADirectoryError
      │    ├── PermissionError
      │    ├── ProcessLookupError
      │    └── TimeoutError
      ├── ReferenceError
      ├── RuntimeError
      │    ├── NotImplementedError
      │    └── RecursionError
      ├── StopAsyncIteration
      ├── StopIteration
      ├── SyntaxError
      │    └── IndentationError
      │         └── TabError
      ├── SystemError
      ├── TypeError
      ├── ValueError
      │    ├── UnicodeError
      │    │    ├── UnicodeDecodeError
      │    │    ├── UnicodeEncodeError
      │    │    └── UnicodeTranslateError
      │    └── UnsupportedOperation
      └── Warning
           ├── DeprecationWarning
           ├── FutureWarning
           ├── UserWarning
           └── ...

常用异常类型详解

1. 基础异常类

# BaseException - 所有异常的基类
# Exception - 几乎所有内置异常的基类(推荐捕获这个)

2. 算术运算异常 (ArithmeticError)

# ZeroDivisionError - 除零错误
try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"除零错误: {e}")

# OverflowError - 数值运算超出最大限制
try:
    import math
    huge_number = math.exp(1000)  # 可能引发OverflowError
except OverflowError as e:
    print(f"数值溢出: {e}")

# FloatingPointError - 浮点计算错误

3. 断言错误

# AssertionError - 断言语句失败
try:
    x = 5
    assert x > 10, "x应该大于10"
except AssertionError as e:
    print(f"断言失败: {e}")

4. 属性相关异常

# AttributeError - 属性引用或赋值失败
try:
    class MyClass:
        pass
    obj = MyClass()
    print(obj.nonexistent_attribute)
except AttributeError as e:
    print(f"属性错误: {e}")

5. 输入输出异常

# EOFError - 到达文件末尾仍尝试读取
try:
    input()  # 在无输入的情况下按Ctrl+D (Unix) 或 Ctrl+Z (Windows)
except EOFError as e:
    print(f"文件结束错误: {e}")

# IOError - 在Python 3.3+中与OSError合并

6. 导入相关异常

# ImportError - 导入模块/对象失败
try:
    import non_existent_module
except ImportError as e:
    print(f"导入错误: {e}")

# ModuleNotFoundError - 模块未找到(ImportError的子类)
try:
    import some_unknown_package
except ModuleNotFoundError as e:
    print(f"模块未找到: {e}")

7. 索引和键查找异常 (LookupError)

# IndexError - 序列索引超出范围
try:
    my_list = [1, 2, 3]
    print(my_list[10])
except IndexError as e:
    print(f"索引错误: {e}")

# KeyError - 字典中查找不存在的键
try:
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])
except KeyError as e:
    print(f"键错误: {e}")

8. 内存相关异常

# MemoryError - 内存不足
try:
    huge_list = [0] * (10**10)  # 尝试分配超大列表
except MemoryError as e:
    print(f"内存不足: {e}")

9. 名称相关异常

# NameError - 局部或全局名称未找到
try:
    print(undefined_variable)
except NameError as e:
    print(f"名称错误: {e}")

# UnboundLocalError - 访问未绑定的局部变量
def test_function():
    try:
        print(x)  # 在赋值前引用
        x = 5
    except UnboundLocalError as e:
        print(f"未绑定局部变量: {e}")

10. 操作系统相关异常 (OSError及其子类)

# FileNotFoundError - 文件或目录不存在
try:
    with open("nonexistent_file.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"文件未找到: {e}")

# PermissionError - 没有操作权限
try:
    with open("/root/protected_file", "w") as f:
        f.write("test")
except PermissionError as e:
    print(f"权限错误: {e}")

# FileExistsError - 创建已存在的文件/目录
import os
try:
    os.makedirs("existing_directory")
except FileExistsError as e:
    print(f"文件已存在: {e}")

# IsADirectoryError / NotADirectoryError - 目录/文件类型错误
try:
    with open("/", "r") as f:  # 尝试以文件方式打开目录
        content = f.read()
except IsADirectoryError as e:
    print(f"这是一个目录: {e}")

# TimeoutError - 操作超时
import socket
try:
    socket.create_connection(("google.com", 80), timeout=0.001)
except TimeoutError as e:
    print(f"连接超时: {e}")

# ConnectionError 及其子类
try:
    # 各种连接错误的示例
    pass
except ConnectionError as e:
    print(f"连接错误: {e}")

11. 引用相关异常

# ReferenceError - 弱引用访问已回收对象
import weakref
try:
    class MyClass:
        pass
    
    obj = MyClass()
    weak_obj = weakref.ref(obj)
    del obj
    weak_obj()  # 访问已回收对象
except ReferenceError as e:
    print(f"引用错误: {e}")

12. 运行时异常 (RuntimeError)

# NotImplementedError - 抽象方法未实现
class BaseClass:
    def must_implement(self):
        raise NotImplementedError("子类必须实现此方法")

try:
    obj = BaseClass()
    obj.must_implement()
except NotImplementedError as e:
    print(f"未实现错误: {e}")

# RecursionError - 递归深度超过限制
def recursive_function(n):
    return recursive_function(n + 1)

try:
    recursive_function(0)
except RecursionError as e:
    print(f"递归深度超限: {e}")

13. 迭代相关异常

# StopIteration - 迭代器没有更多值
try:
    iterator = iter([1, 2])
    next(iterator)
    next(iterator)
    next(iterator)  # 没有更多元素
except StopIteration as e:
    print(f"迭代结束: {e}")

# StopAsyncIteration - 异步迭代器没有更多值

14. 语法相关异常

# SyntaxError - 语法错误
try:
    eval("x =")  # 无效语法
except SyntaxError as e:
    print(f"语法错误: {e}")

# IndentationError - 缩进错误
try:
    exec("if True:\nprint('hello')")  # 缩进不正确
except IndentationError as e:
    print(f"缩进错误: {e}")

# TabError - Tab和空格混用

15. 系统相关异常

# SystemError - 解释器内部错误

16. 类型相关异常

# TypeError - 操作或函数应用于不适当类型的对象
try:
    "2" + 2  # 字符串和整数不能相加
except TypeError as e:
    print(f"类型错误: {e}")

17. 值相关异常 (ValueError)

# ValueError - 操作接收到正确类型但不合适的值
try:
    int("abc")  # 字符串无法转换为整数
except ValueError as e:
    print(f"值错误: {e}")

# UnicodeError 及其子类
try:
    "test".encode('ascii').decode('utf-8')  # 编码解码不匹配
except UnicodeDecodeError as e:
    print(f"Unicode解码错误: {e}")

18. 警告类 (Warning)

# 警告不是异常,但可以转换为异常
import warnings

warnings.simplefilter("error")  # 将警告转换为异常
try:
    warnings.warn("这是一个警告", DeprecationWarning)
except DeprecationWarning as e:
    print(f"捕获到警告: {e}")

完整异常处理示例

def comprehensive_exception_demo():
    """展示多种异常的处理方式"""
    
    exceptions_to_demo = [
        # (引发异常的代码, 异常类型, 描述)
        (lambda: 1/0, ZeroDivisionError, "除零错误"),
        (lambda: [1,2,3][10], IndexError, "索引越界"),
        (lambda: {}['key'], KeyError, "字典键不存在"),
        (lambda: int('abc'), ValueError, "值转换错误"),
        (lambda: '2' + 2, TypeError, "类型不匹配"),
        (lambda: open('nonexistent.txt'), FileNotFoundError, "文件不存在"),
        (lambda: undefined_var, NameError, "变量未定义"),
    ]
    
    for code, expected_exception, description in exceptions_to_demo:
        try:
            code()
        except expected_exception as e:
            print(f"{description}: {e}")
        except Exception as e:
            print(f"意外异常 {type(e).__name__}: {e}")

# 运行示例
comprehensive_exception_demo()

最佳实践建议

  1. 具体化异常捕获:尽量捕获具体的异常类型
  2. 避免裸except:不要使用空的except语句
  3. 合理使用异常链:了解异常的层次结构
  4. 记录异常信息:使用logging记录异常详情
  5. 资源清理:使用try-finally或with语句确保资源释放

这个列表涵盖了Python中绝大多数常用的异常类型,掌握它们有助于编写更健壮、可维护的代码。

posted on 2025-10-14 21:13  SOC验证工程师  阅读(3)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3