掌握Python异常处理,打造健壮程序

一、什么是异常?

  • 异常 是程序执行过程中出现的错误事件,会导致程序中断(如除零错误、文件不存在等)。

  • 异常处理 用于捕获并处理这些错误,使程序更健壮。


二、基本语法:try - except

try:
    # 可能引发异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理特定异常
    print("不能除以零!")

关键点:

  • 捕获多个异常
try:
    # 代码
except (ZeroDivisionError, TypeError) as e:
    print(f"错误类型:{type(e).__name__}, 信息:{e}")
  • 捕获所有异常(慎用):
try:
    # 代码
except Exception as e:  # 避免裸露的 except:
    print(f"发生错误:{e}")

三、else 和 finally

  • else:当 try 块无异常时执行。

  • finally:无论是否异常,最后都会执行(常用于释放资源,如关闭文件)。

try:
    file = open("test.txt", "r")
except FileNotFoundError:
    print("文件不存在")
else:
    print("文件已打开")
    content = file.read()
    file.close()
finally:
    print("程序执行完毕")

四、主动抛出异常:raise

def validate_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数")
    return age

try:
    validate_age(-5)
except ValueError as e:
    print(e)  # 输出:年龄不能为负数

五、自定义异常

class MyCustomError(Exception):
    def __init__(self, message):
        super().__init__(message)

try:
    raise MyCustomError("这是自定义错误")
except MyCustomError as e:
    print(e)  # 输出:这是自定义错误

六、常见内置异常类型

Python 异常类型均继承自 BaseException,以下是常用的子类:

1. 基础错误

异常类型触发场景示例
Exception所有内置异常的基类(一般异常基类)
BaseException所有异常的顶级基类(一般不直接捕获)
SyntaxError语法错误(如 print("Hello) 缺少引号)
IndentationError缩进错误(代码块对齐错误)

2. 运算相关

异常类型触发场景示例
ZeroDivisionError除数为零(如 10 / 0
ArithmeticError所有算术错误的基类(如溢出)
OverflowError数值运算结果超出范围(如超大整数)

3. 数据类型相关

异常类型触发场景示例
TypeError类型不匹配(如 "a" + 1
ValueError值无效(如 int("abc")
AssertionErrorassert 断言失败

4. 容器操作相关

异常类型触发场景示例
IndexError索引越界(如 lst[10],列表长度不足)
KeyError字典键不存在(如 dct["key"]
AttributeError对象属性不存在(如 obj.undefined_method()

5. 文件/IO相关

异常类型触发场景示例
FileNotFoundError文件不存在(如 open("nonexist.txt")
PermissionError无操作权限(如写入只读文件)
IOError输入输出错误(Python 3 中合并到 OSError

6. 系统/环境相关

异常类型触发场景示例
OSError操作系统级错误(如文件路径错误)
KeyboardInterrupt用户按下中断键(如 Ctrl+C)
MemoryError内存耗尽

7. 其他常用异常

异常类型触发场景示例
StopIteration迭代器没有更多值(手动触发或生成器结束)
ImportError导入模块失败(如模块不存在)
NameError变量未定义(如 print(undefined_var)
UnicodeErrorUnicode 编解码错误

七、其他异常和警告

1. 警告(继承自 Warning

类型说明
DeprecationWarning已弃用功能的警告
UserWarning用户自定义警告

2. 自定义异常

可通过继承 Exception 类创建:

class MyError(Exception):
    pass

八、异常继承关系(简图)

BaseException
 ├── KeyboardInterrupt
 ├── SystemExit
 └── Exception
      ├── ArithmeticError
      │    ├── ZeroDivisionError
      │    └── ...
      ├── AssertionError
      ├── AttributeError
      ├── EOFError
      ├── ImportError
      ├── LookupError
      │    ├── IndexError
      │    └── KeyError
      ├── NameError
      ├── OSError
      │    ├── FileNotFoundError
      │    ├── PermissionError
      │    └── ...
      ├── RuntimeError
      ├── SyntaxError
      ├── TypeError
      ├── ValueError
      └── ...

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值