Hom's Blog


Python捕获所有异常

有关异常的东东可以参考前篇Python异常处理.

前篇已经提及可以使用except: statement来捕获所有异常, 但是你不知道那个是什么异常..但我们很多时候也想知道究竟是啥异常在哪里发生.其实是有方法通抓错误并分析的. 当然, 使用异常处理还是最好使用好针对某种异常的处理啦.推荐记住except:traceback.print_exc()

使用traceback模块

回溯模块可以回溯运行记录. traceback.print_exc()可以印出最后的异常情况.

import traceback
try:
	print b[1]
except:
	traceback.print_exc()
print "hello world"
raw_input()
#输出:
#Traceback (most recent call last):
#  File "C:\Users\Hom\Desktop\test.py", line 17, in <module>
#    print b[1];
#NameError: name 'b' is not defined
#hello world

还可以使用文件来保存异常信息用于日后分析,例如:

import traceback
try:
	print b[1]
except:
	ferr=open("errorlog.txt",'a')
	traceback.print_exc(file=ferr)#实名指定参数
	f.flush()#刷新
	f.close()
raw_input()

使用sys模块

使用sys.exc_info() 方法会返回一个三元元组, 第一个是错误类型, 第二个是错误信息,第三个是回溯对象信息. 信息差不多,但是不如traceback.print_exc()来得干脆.

import traceback
try:
	print b[1]
except:
	print sys.exc_info()
print "hello world"
raw_input()
#输出:
#(<type 'exceptions.NameError'>, NameError("name 'b' is not defined",), <traceback object at 0x02582288>)
#hello world

使用基类:

try:
	statement
except Exception,ex:
	print Exception,":",ex

这里使用了基类Exception来通捕获错误. 其实第一个只是告诉自己是什么类型异常(肯定是<type ‘exceptions.Exception’>了),意义不大,而后面实例化抓回来的ex就可以储存信息了,究竟是啥错误~ 这种应用基类的方法可以捕获各种错误并且实例化,但是缺点是不知道异常类型, 靠猜.

本博文已合并到Python语法汇总中, 不再更新.



◆ 本文地址: http://platinhom.github.io/2015/08/26/CatchAllError/, 转载请注明 ◆

前一篇: Python异常处理
后一篇: Bash中替换命令tr


Contact: Hom / 已阅读()
Source 类别: Coding  标签: Python