本文目录导读:

在Python中打印异常堆栈有多种方法,下面详细介绍几种常用方式:
使用 traceback 模块(推荐)
import traceback
try:
# 模拟一个异常
result = 1 / 0
except Exception as e:
print("异常信息:", e)
print("异常堆栈:")
traceback.print_exc() # 打印完整堆栈
也可以获取堆栈字符串:
import traceback
try:
result = 1 / 0
except Exception as e:
# 获取堆栈字符串
stack_trace = traceback.format_exc()
print("完整堆栈:")
print(stack_trace)
使用 sys 模块
import sys
try:
result = 1 / 0
except Exception as e:
print("异常信息:", e)
# 打印异常详细信息
sys.excepthook(*sys.exc_info())
使用 logging 模块(生产环境推荐)
import logging
# 配置日志
logging.basicConfig(level=logging.ERROR,
format='%(asctime)s - %(levelname)s - %(message)s')
try:
result = 1 / 0
except Exception as e:
# 自动打印异常堆栈
logging.exception("发生错误")
打印自定义级别的堆栈
import traceback
def print_custom_stack():
"""打印指定层数的堆栈"""
try:
result = 1 / 0
except Exception as e:
# 只打印最后5行堆栈
traceback.print_exc(limit=5)
print_custom_stack()
获取格式化后的堆栈字符串
import traceback
try:
result = 1 / 0
except Exception as e:
# 获取格式化的堆栈列表
stack_list = traceback.format_exc().split('\n')
print("堆栈行数:", len(stack_list))
print("\n堆栈内容:")
for line in stack_list:
print(line)
同时打印异常信息和堆栈
import traceback
try:
with open('nonexistent_file.txt', 'r') as f:
content = f.read()
except FileNotFoundError as e:
print(f"异常类型: {type(e).__name__}")
print(f"异常信息: {e}")
print("异常堆栈:")
traceback.print_exc()
print("\n--- 堆栈字符串 ---")
print(traceback.format_exc())
实际应用示例
import traceback
import logging
def risky_function(value):
"""可能引发异常的函数"""
if value == 0:
raise ValueError("值不能为0")
return 100 / value
def safe_function(value):
"""安全调用函数并记录异常"""
try:
result = risky_function(value)
return result
except Exception as e:
# 记录完整异常信息
print(f"函数调用失败: {e}")
print("完整堆栈跟踪:")
traceback.print_exc()
# 保存到日志文件
logging.basicConfig(filename='error.log', level=logging.ERROR)
logging.exception(f"处理值 {value} 时出错")
return None
# 测试
print(safe_function(10)) # 正常
print(safe_function(0)) # 异常
输出示例
异常信息: division by zero
异常堆栈:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
ZeroDivisionError: division by zero
最佳实践建议
- 开发环境:使用
traceback.print_exc()快速调试 - 生产环境:使用
logging.exception()记录到日志文件 - 异常处理:尽量捕获特定异常类型,而不是所有异常
- 性能考虑:异常处理有性能开销,不要过度使用
选择合适的打印方式取决于你的具体需求和使用场景。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播