本文目录导读:

在Python中抛出异常信息主要有以下几种方式:
使用 raise 关键字
抛出内置异常
# 抛出值错误
raise ValueError("输入的值不合法")
# 抛出类型错误
raise TypeError("参数类型错误")
# 抛出运行时错误
raise RuntimeError("运行时出现了问题")
条件判断后抛出
def divide(a, b):
if b == 0:
raise ZeroDivisionError("除数不能为零")
return a / b
# 使用
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(f"错误信息: {e}")
自定义异常类
# 定义自定义异常
class InvalidAgeError(Exception):
"""年龄不合法异常"""
def __init__(self, age, message="年龄不合法"):
self.age = age
self.message = message
super().__init__(self.message)
# 使用自定义异常
def set_age(age):
if age < 0 or age > 150:
raise InvalidAgeError(age, f"年龄 {age} 不在0-150范围内")
print(f"年龄设置成功: {age}")
# 测试
try:
set_age(200)
except InvalidAgeError as e:
print(f"错误: {e.message}, 年龄值: {e.age}")
重新抛出异常
def process_data(data):
try:
result = int(data) # 可能抛出 ValueError
return result
except ValueError:
# 记录日志后重新抛出
print(f"转换失败: {data}")
raise # 重新抛出原始异常
# 或抛出新的异常
def validate_input(value):
try:
if value < 0:
raise ValueError(f"值不能为负数: {value}")
except ValueError:
# 转换为自定义异常
raise RuntimeError(f"输入验证失败: {value}")
在异常链中传递信息
def load_config(filename):
try:
with open(filename, 'r') as f:
return f.read()
except FileNotFoundError as e:
raise RuntimeError(f"无法加载配置文件: {filename}") from e
# 使用
try:
config = load_config("config.txt")
except RuntimeError as e:
print(f"加载失败: {e}")
print(f"原始异常: {e.__cause__}")
使用 assert 断言
def check_positive(num):
assert num > 0, f"数字 {num} 必须大于0"
return num ** 2
# 断言失败时会抛出 AssertionError
try:
check_positive(-5)
except AssertionError as e:
print(f"断言失败: {e}")
格式化异常信息
def calculate_bmi(weight, height):
if weight <= 0:
raise ValueError(f"体重必须大于0,当前值: {weight}")
if height <= 0:
raise ValueError(f"身高必须大于0,当前值: {height}")
bmi = weight / (height ** 2)
return bmi
# 使用 f-string 格式化错误信息
def process_user_data(user_data):
required_fields = ['name', 'age', 'email']
for field in required_fields:
if field not in user_data:
raise KeyError(f"缺少必填字段 '{field}',请检查数据完整性")
实际应用示例
class BankAccount:
def __init__(self, balance=0):
if balance < 0:
raise ValueError("初始余额不能为负数")
self.balance = balance
def withdraw(self, amount):
if amount <= 0:
raise ValueError(f"取款金额必须为正数,当前金额: {amount}")
if amount > self.balance:
raise InsufficientFundsError(
f"余额不足,需要 {amount},实际余额 {self.balance}",
self.balance, amount
)
self.balance -= amount
return self.balance
class InsufficientFundsError(Exception):
def __init__(self, message, balance, amount):
self.balance = balance
self.amount = amount
super().__init__(message)
# 测试
try:
account = BankAccount(100)
account.withdraw(150)
except InsufficientFundsError as e:
print(f"交易失败: {e}")
print(f"当前余额: {e.balance}, 试图取出: {e.amount}")
关键要点
- 始终使用
raise关键字来主动抛出异常 - 选择合适的异常类型 (ValueError, TypeError, RuntimeError等)
- 提供清晰的错误信息,帮助调试和定位问题
- 可以自定义异常类继承自
Exception - 使用异常链 (
from e)保留原始异常信息 - 遵循异常处理最佳实践:不要滥用异常,只在真正的异常情况下使用
这样你就可以在Python代码中有效地抛出和管理异常信息了!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播