基于python traceback实现异常的获取与处理

yipeiwu_com6年前Python基础

这篇文章主要介绍了基于python traceback实现异常的获取与处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1、traceback.print_exc()

2、traceback.format_exc()

3、traceback.print_exception()

简单说下这三个方法是做什么用的:

1、print_exc():是对异常栈输出

2、format_exc():是把异常栈以字符串的形式返回,print(traceback.format_exc()) 就相当于traceback.print_exc()

3、print_exception():traceback.print_exc()实现方式就是traceback.print_exception(sys.exc_info()),可以点sys.exc_info()进

去看看实现

测试代码如下:

def func(a, b):
  return a / b


if __name__ == '__main__':
  import sys
  import time
  import traceback

  try:
    func(1, 0)
  except Exception as e:
    print('***', type(e), e, '***')
    time.sleep(2)

    print("***traceback.print_exc():*** ")
    time.sleep(1)
    traceback.print_exc()
    time.sleep(2)

    print("***traceback.format_exc():*** ")
    time.sleep(1)
    print(traceback.format_exc())
    time.sleep(2)

    print("***traceback.print_exception():*** ")
    time.sleep(1)
    traceback.print_exception(*sys.exc_info())

运行结果:

*** <class 'ZeroDivisionError'> division by zero ***


***traceback.print_exc():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero


***traceback.format_exc():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero


***traceback.print_exception():*** 
Traceback (most recent call last):
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 42, in <module>
  func(1, 0)
 File "E:/HttpRunnerManager-jh/ApiManager/tests.py", line 33, in func
  return a / b
ZeroDivisionError: division by zero

可以看出,三种方式打印结果是一样的。在开发时,做调试是很方便的。也可以把这种异常栈写入日志。

logging.exception(ex)

# 指名输出栈踪迹, logging.exception的内部也是包了一层此做法
logging.error(ex, exc_info=1) 

# 更加严重的错误级别 
logging.critical(ex, exc_info=1) 

# 我直接copy的,未尝试。有时间会试下的

python 还有一个模块叫cgitb,输出的error非常详情。

  try:
    func(1, 0)
  except Exception as e:
    import cgitb
    cgitb.enable(format='text')
    func(1, 0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python无限生成不重复(字母,数字,字符)组合的方法

使用python自带的itertools模块 调用其product函数 传入我们想组合生成的字符数据 便会源源不断的生成组合 而且不会重复 repeat参数指定生成多少位 impor...

详解python之配置日志的几种方式

作为开发者,我们可以通过以下3中方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数; 2)...

Python实现栈的方法

本文实例讲述了Python实现栈的方法。分享给大家供大家参考。具体实现方法如下: #!/usr/bin/env python #定义一个列表来模拟栈 stack = [] #进...

python中requests库session对象的妙用详解

在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息。 妙用1 requests库的session对象能够帮我们跨请...

python实现一组典型数据格式转换

python实现一组典型数据格式转换

本文实例为大家分享了一组典型数据格式转换的python实现代码,供大家参考,具体内容如下 有一组源数据,第一行会是个日期数据,第二行标明字段,再接下来是两行数据行。 1018 14:3...