Python多异常捕获
Python 支持多种方式捕获多个异常类型,提高代码健壮性。
元组捕获多种异常
单个 except 捕获多种异常
Python
try:
value = int(input("输入数字: "))
result = 10 / value
except (ValueError, ZeroDivisionError):
print("输入错误或除零错误")
获取异常对象
Python
try:
value = int(input("输入数字: "))
result = 10 / value
except (ValueError, ZeroDivisionError) as e:
print(f"发生错误: {type(e).__name__} - {e}")
多个 except 分块
分别处理不同异常
Python
try:
value = int(input("输入数字: "))
result = 10 / value
except ValueError:
print("请输入有效数字")
except ZeroDivisionError:
print("不能输入0")
不同异常不同处理逻辑
Python
try:
file = open("data.txt", "r")
content = file.read()
file.close()
except FileNotFoundError:
print("文件不存在,创建新文件")
file = open("data.txt", "w")
except PermissionError:
print("无权限访问文件")
except IOError as e:
print(f"读写错误: {e}")
异常捕获顺序
从具体到一般
Python
try:
do_something()
except ValueError: # 具体异常先捕获
print("值错误")
except Exception: # 一般异常后捕获
print("其他错误")
顺序错误示例
Python
try:
do_something()
except Exception: # 先捕获所有异常
print("错误")
except ValueError: # ValueError 已被 Exception 捕获,永远不执行
print("值错误")
子类异常必须在父类异常之前捕获。
异常继承关系
Python 异常层级
text
BaseException
├── SystemExit
├── KeyboardInterrupt
├── GeneratorExit
└── Exception
├── StopIteration
├── ArithmeticError
│ ├── ZeroDivisionError
│ ├── FloatingPointError
├── LookupError
│ ├── IndexError
│ ├── KeyError
├── ValueError
├── TypeError
├── OSError
│ ├── FileNotFoundError
│ ├── PermissionError
捕获父类异常
Python
try:
result = 10 / 0
except ArithmeticError: # 捕获 ZeroDivisionError 的父类
print("算术错误")
实际应用
文件操作多异常
Python
try:
with open("data.txt", "r") as f:
data = f.read()
value = int(data)
except (FileNotFoundError, PermissionError):
print("文件访问错误")
except ValueError:
print("文件内容格式错误")
网络请求多异常
Python
import requests
try:
response = requests.get("https://api.example.com", timeout=5)
data = response.json()
except requests.Timeout:
print("请求超时")
except requests.ConnectionError:
print("连接失败")
except requests.RequestException: # 其他请求异常
print("请求错误")
except ValueError: # JSON 解析错误
print("响应格式错误")
数据处理
Python
def process_data(data):
try:
value = int(data["value"])
result = 100 / value
return result
except KeyError:
print("缺少 value 字段")
except (ValueError, TypeError):
print("value 格式错误")
except ZeroDivisionError:
print("value 不能为 0")
return None
统一处理与分类处理
统一处理
Python
# 多异常同一处理逻辑
try:
risky_operation()
except (ValueError, TypeError, KeyError) as e:
log_error(e)
handle_error()
分类处理
Python
# 多异常不同处理逻辑
try:
risky_operation()
except ValueError:
handle_value_error()
except TypeError:
handle_type_error()
except KeyError:
handle_key_error()
要点总结
- 元组
(A, B)在单个 except 中捕获多种异常 - 多个 except 分块分别处理不同异常
- 捕获顺序:具体异常 → 父类异常 → 一般异常
- Exception 是大多数异常的父类
- 统一处理用元组,分类处理用多个 except
📝 发现内容有误?点击此处直接编辑