python捕捉错误 exception,traceback和sys.exc_info()

一、exception,traceback和sys.exc_info()区别

1、exception 能看到错误提示
2、traceback能看到具体的错误在哪一行
traceback.prit_exc()和traceback.format_exc()区别:

format_exc() 返回字符串
  print_exc() 直接给打印出来
  故 traceback.print_exc() 与 print (traceback.format_exc()) 显示效果是一样的
  PS:但print_exc()还可以接受file参数直接写入到一个文件中。
  例如:traceback.print_exc(file=open(‘log.log’, mode=‘a’, encoding=‘utf-8’))
  将文件写入到了log.log文件中

3、sys.exc_info能看到错误类型和错误提示。
sys.exc_info()返回的值是一个元组,其中第一个元素,exc_type是异常的对象类型,exc_value是异常的值,exc_tb是一个traceback对象,对象中包含出错的行数、位置等数据。
sys.exc_info() 返回错误信息方法
返回 (type, value, traceback)实际为一个元组 type为异常类型, value为异常的参数(通常为异常错误的信息), traceback调用堆栈封装在最初发生异常的地方

其中traceback中还包含了更为丰富的信息,比如文件名,行号等等。如果觉得系统默认的traceback打印格式不好看的话,可以利用exc_info的返回值自定义格式。

import sys

def fake_exception():
    1 / 0

def catch_exception():
    try:
        fake_exception()
    except:
        e_type, e_value, e_traceback = sys.exc_info()
        print "type ==> %s" % (e_type.__name__)
        print "value ==> %s" %(e_value.message)
        print "traceback ==> file name: %s" %(e_traceback.tb_frame.f_code.co_filename)
        print "traceback ==> line no: %s" %(e_traceback.tb_lineno)
        print "traceback ==> function name: %s" %(e_traceback.tb_frame.f_code.co_name)

catch_exception()

结果显示:

type ==> typename: ZeroDivisionError
value ==> message: integer division or modulo by zero
traceback ==> fielname: .\test.py
traceback ==> lineno: 8
traceback ==> name: catch_exception

你可能感兴趣的:(python-web)