#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:love_cat
# 异常处理在python中已经屡见不鲜了,我们不仅可以处理异常,也可以将异常打印出来.
try:
print(a) # 显然a没有被定义
except Exception as e:
print(e)
# 程序的输出结果如下
'''
name 'a' is not defined
'''
# 但仅仅如此,我们却不知道程序在什么地方报的错
# 当我们不使用try语句时,解释器会给我们报出很详细的错误,但此时程序也崩溃了
# 如何在保证程序不崩溃的前提下,获取详细的错误信息呢?
# 这时候,可以使用traceback模块下的方法
import traceback
try:
print(a) # a依旧没有被定义
except Exception as e:
traceback.print_exc()
print('古明地盆')
# 程序输出结果如下
'''
Traceback (most recent call last):
File "F:/satori/python--traceback/异常处理.py", line 22, in <module>
print(a) # a依旧没有被定义
NameError: name 'a' is not defined
古明地盆
'''
# 可以看出来这和程序崩溃时,解释器报出的错误是一致的,但我们下面的字符串还是被打印了出来
# 除了traceback.print_exc()之外,还可以使用traceback.format_exc()
# 区别是traceback.print_exc()报出的错误的形式跟程序崩溃时一模一样,连字体颜色也是红色,咋一看会真的以为程序报错
# 但traceback.format_exc()则是以字符串的形式返回,但需要加上print
try:
print(a) # a依旧没有被定义
except Exception as e:
print(traceback.format_exc())
# 程序输出结果如下
'''
Traceback (most recent call last):
File "F:/satori/python--traceback/异常处理.py", line 39, in <module>
print(a) # a依旧没有被定义
NameError: name 'a' is not defined
'''
# 虽然看起来和上面没有区别,但后者是以字符串返回的,没有红红的字体。
# 此外traceback.print_exc()还可以将错误信息写到文件当中
try:
print(a) # a依旧没有被定义
except Exception as e:
traceback.print_exc(file=open('traceback.txt','w',encoding='utf-8'))
# 可以看到新出现了traceback.txt文件,打开文件可以看到如下信息
'''
Traceback (most recent call last):
File "F:/satori/python--traceback/异常处理.py", line 52, in <module>
print(a) # a依旧没有被定义
NameError: name 'a' is not defined
'''