第二十二讲 python中traceback 模块

目录

1. traceback 模块概述

2.捕获和记录异常

3.traceback 模块的函数

3.1 traceback.format_exc()

3.2 traceback.format_exception(etype, value, tb)

3.3 traceback.print_exc()

3.4 traceback.extract_tb(tb)


1. traceback 模块概述

traceback 模块提供了多种函数,用于提取、格式化和打印异常的回溯信息。异常的回溯信息是指当程序发生异常时,Python 解释器记录的调用堆栈信息,包括异常发生的位置、调用链以及每一层的具体代码。

常用功能:

  • traceback.format_exc():返回格式化的异常信息字符串。
  • traceback.format_exception():返回异常信息的列表,其中每个元素是格式化的错误消息。
  • traceback.print_exc():将格式化的异常信息输出到标准错误流(stderr)。
  • traceback.extract_tb():从 traceback 对象中提取出回溯信息。
  • traceback.format_tb():格式化 traceback 对象中的回溯信息。

2.捕获和记录异常

traceback 模块来捕获异常并生成详细的日志信息。

import traceback
import logging

# 配置 logging 模块
logging.basicConfig(filename='app.log', level=logging.ERROR)

try:
    # 故意引发一个异常
    result = 1 / 0
except Exception as e:
    # 捕获异常信息
    exc_type, exc_value, exc_traceback = sys.exc_info()
    
    # 获取格式化的异常信息
    formatted_exception = traceback.format_exc()
    
    # 打印异常信息
    print(formatted_exception)
    
    # 将异常信息写入日志文件
    logging.error("An error occurred:\n%s", formatted_exception)

3.traceback 模块的函数

3.1 traceback.format_exc()

返回一个字符串,包含详细的异常信息和回溯信息。

import traceback

try:
    1 / 0
except Exception:
    print(traceback.format_exc())

 打印结果:

Traceback (most recent call last):
  File "/Users/1.py", line 4, in <module>
    1 / 0
ZeroDivisionError: division by zero

3.2 traceback.format_exception(etype, value, tb)

返回一个格式化异常信息的列表,其中每个元素都是一个格式化的字符串。

import traceback
import sys

try:
    1 / 0
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    formatted_exception = traceback.format_exception(exc_type, exc_value, exc_traceback)
    print(''.join(formatted_exception))
    print(exc_type)
    print(exc_value)
    print(exc_traceback)

打印结果:

Traceback (most recent call last):
  File "/Users/1.py", line 5, in <module>
    1 / 0
ZeroDivisionError: division by zero

<class 'ZeroDivisionError'>
division by zero
<traceback object at 0x7fda012ab410>

3.3 traceback.print_exc()

直接将格式化的异常信息打印到标准错误流(stderr)。

import traceback

try:
    1 / 0
except Exception:
    traceback.print_exc()

打印结果:

3.4 traceback.extract_tb(tb)

提取 traceback 对象中的回溯信息,返回一个 FrameSummary 对象的列表。

import traceback
import sys

try:
    1 / 0
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    for frame in traceback.extract_tb(exc_traceback):
        print(frame)

打印结果:

<FrameSummary file /Users/1.py, line 5 in <module>>

3.5 traceback.format_tb(tb)

将 traceback 对象中的回溯信息格式化为字符串列表。

import traceback
import sys

try:
    1 / 0
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    formatted_tb = traceback.format_tb(exc_traceback)
    print(formatted_tb)
    print(''.join(formatted_tb))

打印结果:

['  File "/Users/1.py", line 5, in <module>\n    1 / 0\n']
  File "/Users/1.py", line 5, in <module>
    1 / 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值