上一篇
Python异常参数详解:捕获、传递与自定义异常信息 - Python教程
- Python
- 2025-08-10
- 1911
Python异常参数详解
掌握异常捕获、参数传递与自定义异常处理
什么是异常参数?
在Python中,当异常被引发时,可以附带一个参数(通常是一个字符串或对象),提供有关异常的额外信息。这个参数可以通过except
语句捕获,并用于错误处理。
基本语法:
try:
# 可能引发异常的代码
except ExceptionType as e:
# e 就是异常参数
print(f"发生错误: {e}")
捕获异常参数
使用as
关键字可以将异常对象赋值给一个变量,通过该变量可以访问异常参数。
示例:捕获除零错误
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"错误类型: {type(e).__name__}")
print(f"错误信息: {e}")
print(f"详细参数: {e.args}")
输出结果:
错误类型: ZeroDivisionError
错误信息: division by zero
详细参数: ('division by zero',)
传递异常参数
在自定义异常或重新抛出异常时,可以传递自定义参数,提供更丰富的错误信息。
示例:创建自定义异常类
class InvalidAgeError(Exception):
"""当年龄无效时引发的异常"""
def __init__(self, age, message="年龄必须在0-120之间"):
self.age = age
self.message = message
super().__init__(self.message)
def __str__(self):
return f"{self.age} -> {self.message}"
def register_user(age):
if not (0 <= age <= 120):
raise InvalidAgeError(age)
print(f"用户年龄 {age} 注册成功")
try:
register_user(150)
except InvalidAgeError as e:
print(f"注册失败: {e}")
print(f"无效年龄: {e.age}")
输出结果:
注册失败: 150 -> 年龄必须在0-120之间
无效年龄: 150
异常参数最佳实践
1. 提供有意义的错误信息
在引发异常时,提供清晰、具体的错误信息,帮助调试和问题定位。
raise ValueError("文件格式不支持,仅接受.jpg或.png格式")
2. 使用内置异常类型
优先使用Python内置的异常类型(如ValueError、TypeError等),除非有特殊需求才创建自定义异常。
if not isinstance(value, int):
raise TypeError("参数必须是整数类型")
3. 记录完整异常信息
在捕获异常时,记录完整的异常信息,包括堆栈跟踪。
import traceback
try:
# 代码逻辑
except Exception as e:
traceback.print_exc() # 打印完整堆栈信息
logger.error(f"发生错误: {e}\n{traceback.format_exc()}")
4. 异常链
在捕获异常后重新引发时,使用raise ... from ...
保留原始异常信息。
try:
# 操作数据库
except DatabaseError as e:
raise ApplicationError("数据处理失败") from e
高级应用:多参数异常
Python异常可以携带多个参数,提供更详细的错误上下文信息。
示例:文件处理异常
class FileProcessingError(Exception):
def __init__(self, filename, line_number, message):
self.filename = filename
self.line_number = line_number
self.message = message
super().__init__(f"{filename}:{line_number} - {message}")
def process_file(filename):
try:
with open(filename, 'r') as file:
for i, line in enumerate(file, 1):
if 'error' in line:
raise FileProcessingError(filename, i, "检测到错误关键字")
except FileNotFoundError:
raise FileProcessingError(filename, 0, "文件不存在")
try:
process_file("data.txt")
except FileProcessingError as e:
print(f"文件处理失败: {e}")
print(f"文件名: {e.filename}")
print(f"行号: {e.line_number}")
print(f"原因: {e.message}")
总结:Python异常处理要点
-
✓ 使用
except Exception as e
捕获异常参数 -
✓ 自定义异常类时重写
__init__
和__str__
方法 - ✓ 异常信息应包含足够上下文(文件名、行号、错误值等)
-
✓ 使用
raise ... from ...
保留原始异常链 -
✓ 避免捕获过于宽泛的异常(如
except:
)
本文由AoSui于2025-08-10发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257793.html
发表评论