python第三方库系列之traceback库
traceback模块被用来跟踪异常返回信息. 如下例所示:
import traceback
try:
raise SyntaxError, "traceback test"
except:
traceback.print_exc()
打印出以下结果:
Traceback (most recent call last):
File "H:\PythonWorkSpace\Test\src\TracebackTest.py", line 3, in <module>
raise SyntaxError, "traceback test"
SyntaxError: traceback test
或者:
import traceback
try:
do something
except:
print traceback.format_exc()
log.error(traceback.format_exc())
traceback.print_exc()和print traceback.format_exc()是一样的,只不过traceback.print_exc()打印到屏幕,便于调试,当然也可以写到文件。
在python中,标准异常有很多:
1. NameError:尝试访问一个未申明的变量
2. ZeroDivisionError:除数为0
3. SyntaxError:语法错误
4. IndexError:索引超出范围
5. KeyError:字典关键字不存在
6. IOError:输入输出错误
7. AttributeError:访问未知对象属性
8. ValueError:数值错误
9. TypeError:类型错误
10. AssertionError:断言错误
11. Exception:常规错误的基类
......
在这些标准异常中,Exception是常规错误的基类,所以一般用这个就可以捕获错误:
try:
block
except Exception, e:
log.error("except, %s" % str(e))
有人可能会问了,except Exception, e是什么意思?
那我告诉你:except语句跟着两个东西,前面是异常的类型,后面的是异常对象,包含了一些异常信息。
那又有人可能会问了,“except Exception as e”里的“as”是什么意思?
那我告诉你:as是定义异常的实例(例如except IOError as e)
那又有人可能会问了,“except Exception, e”和“except Exception as e”是什么关系?
那我告诉你:老版本的Python,except语句写作"except Exception, e",Python 2.6后应写作"except Exception as e"。推荐使用后者