> 技术文档 > Python捕获异常

Python捕获异常

Python捕获异常主要通过try-except语句实现,以下是核心语法和使用场景:

一、基础捕获结构

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

二、捕获多种异常

try: # 可能引发多种异常的代码 value = int(\"abc\") except (ValueError, TypeError) as e: # 处理多个异常类型 print(f\"输入错误:{e}\") 

三、捕获所有异常

Exception捕获所有非系统退出的异常(不推荐滥用,优先用具体异常类型):

try: risky_operation() except Exception as e: print(f\"发生未知错误:{e}\") 

四、elsefinally子句

  • else:无异常时执行,位于except之后。

    try: x = 10 / 2 except ZeroDivisionError: print(\"除零错误\") else: print(\"计算结果:\", x) # 输出:计算结果:5.0 
  • finally:无论是否异常都会执行,常用于释放资源(如关闭文件)。

    try: file = open(\"data.txt\", \"r\") data = file.read() except FileNotFoundError: print(\"文件不存在\") finally: file.close() # 确保文件被关闭 print(\"资源已释放\") 

五、异常传递与自定义异常

  • 异常传递:异常会从引发处向上传递,可在调用栈中逐层捕获。

    def func1(): raise ValueError(\"参数错误\") def func2(): func1() try: func2() except ValueError as e: print(f\"捕获到异常:{e}\") # 输出:捕获到异常:参数错误 
  • 自定义异常:继承Exception类创建业务专用异常。

    class InsufficientBalanceError(Exception): def __init__(self, balance, amount): super().__init__(f\"余额不足:当前{balance}元,需{amount}元\") try: if balance < amount: raise InsufficientBalanceError(balance, amount) except InsufficientBalanceError as e: print(e) # 输出:余额不足:当前100元,需150元 

六、最佳实践

  1. 精准捕获:优先用具体异常类型(如ZeroDivisionError),避免用裸except:

  2. 资源管理:用try/finally或上下文管理器(with)确保资源释放。

  3. 日志记录:在except中记录异常信息(如logging.error),便于调试。