本文目录导读:

- 使用自定义异常类
- 使用异常链
- 使用
traceback模块获取详细堆栈 - 添加上下文信息
- 使用 logging 模块记录详细信息
- 使用
sys.exc_info()获取异常信息 - 第三方库:
rich提供更美观的异常信息 - 实际应用示例
是的,Python调试时异常可以附带更多信息,以下是几种常见的方法:
使用自定义异常类
class CustomError(Exception):
def __init__(self, message, code=None, data=None):
super().__init__(message)
self.code = code
self.data = data
# 使用
try:
raise CustomError("操作失败", code=400, data={"field": "name"})
except CustomError as e:
print(f"错误信息: {e}")
print(f"错误代码: {e.code}")
print(f"附加数据: {e.data}")
使用异常链
try:
# 一些操作
result = 1 / 0
except ZeroDivisionError as e:
raise RuntimeError("计算失败") from e
使用 traceback 模块获取详细堆栈
import traceback
try:
# 可能出错的代码
raise ValueError("自定义错误")
except:
# 获取完整堆栈信息
traceback.print_exc()
# 或获取字符串形式
error_info = traceback.format_exc()
print(error_info)
添加上下文信息
import sys
def process_data(data):
try:
# 数据处理
result = data['key1'] / data['key2']
return result
except Exception as e:
# 添加额外上下文信息
raise RuntimeError(f"处理数据时出错: {data}") from e
try:
process_data({"key1": 10, "key2": 0})
except Exception as e:
print(f"异常: {e}")
print(f"原始异常: {e.__cause__}")
使用 logging 模块记录详细信息
import logging
logging.basicConfig(level=logging.DEBUG)
try:
value = int("abc")
except ValueError as e:
logging.error("转换失败", exc_info=True) # 记录完整堆栈
logging.debug(f"输入值: 'abc'") # 记录额外信息
使用 sys.exc_info() 获取异常信息
import sys
try:
1/0
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
print(f"异常类型: {exc_type}")
print(f"异常值: {exc_value}")
print(f"堆栈跟踪: {exc_traceback}")
第三方库:rich 提供更美观的异常信息
from rich.console import Console from rich.traceback import install install() # 安装rich的异常处理器 console = Console() # 当异常发生时,会自动显示更详细的格式化信息
实际应用示例
class DatabaseError(Exception):
def __init__(self, message, query=None, params=None, original_error=None):
self.query = query
self.params = params
self.original_error = original_error
super().__init__(message)
def execute_query(sql, params=None):
try:
# 模拟数据库操作
raise ConnectionError("数据库连接失败")
except ConnectionError as e:
raise DatabaseError(
"数据库查询失败",
query=sql,
params=params,
original_error=e
)
try:
execute_query("SELECT * FROM users WHERE id = %s", [1])
except DatabaseError as e:
print(f"错误: {e}")
print(f"SQL: {e.query}")
print(f"参数: {e.params}")
print(f"原始错误: {e.original_error}")
这些方法可以帮助你获取更详细的异常信息,便于调试和问题定位。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播