抛出异常 #
使用raise语句主动抛出异常。
一、基本用法 #
python
# 抛出异常
raise ValueError("值错误")
# 重新抛出异常
try:
result = 10 / 0
except ZeroDivisionError:
raise # 重新抛出当前异常
二、条件抛出 #
python
def set_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
if age > 150:
raise ValueError("年龄不合理")
return age
def divide(a, b):
if b == 0:
raise ZeroDivisionError("除数不能为零")
return a / b
三、自定义异常 #
python
class InsufficientFundsError(Exception):
"""余额不足异常"""
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
super().__init__(f"余额不足:当前{balance},需要{amount}")
class BankAccount:
def __init__(self, balance):
self.balance = balance
def withdraw(self, amount):
if amount > self.balance:
raise InsufficientFundsError(self.balance, amount)
self.balance -= amount
return amount
try:
account = BankAccount(100)
account.withdraw(200)
except InsufficientFundsError as e:
print(e) # "余额不足:当前100,需要200"
四、异常链 #
python
def parse_data(data):
try:
return int(data)
except ValueError as e:
raise TypeError("数据转换失败") from e
try:
parse_data("abc")
except TypeError as e:
print(e) # "数据转换失败"
print(e.__cause__) # 原始异常
五、最佳实践 #
python
# 1. 使用具体的异常类型
def validate_score(score):
if not 0 <= score <= 100:
raise ValueError(f"分数必须在0-100之间,当前:{score}")
# 2. 异常消息要清晰
raise FileNotFoundError(f"配置文件不存在:{filename}")
# 3. 自定义异常继承Exception
class MyError(Exception):
"""自定义错误"""
pass
# 4. 保留原始异常信息
try:
risky_operation()
except SomeError as e:
raise NewError("新错误") from e
最后更新:2026-03-16