Python的异常处理可以向用户准确反馈出错信息,所有异常都是基类Exception的子类。自定义异常都是从基类Exception中继承。Python自动将所有内建的异常放到内建命名空间中,所以程序不必导入exceptions模块即可使用异常。
捕获异常的方式
方法一:捕获所有的异常
-
try:
-
a = b
-
b = c
-
except Exception,data:
-
print Exception,":",data
-
'''输出:<type 'exceptions.Exception'> : local variable 'b'
-
referenced before assignment '
方法二:采用traceback模块查看异常,需要导入traceback模块,这个方法会打印出异常代码的行号
-
try:
-
a = b
-
b = c
-
except:
-
print traceback.print_exc()
-
-
'''输出: Traceback (most recent call last):
-
File "test.py", line 20, in main
-
a = b
-
UnboundLocalError: local variable 'b
方法三:采用sys模块回溯最后的异常
-
try:
-
a = b
-
b = c
-
except:
-
info = sys.exc_info()
-
print info
-
print info[0]
-
print info[1]
-
-
'''输出:
-
(<type 'exceptions.UnboundLocalError'>, UnboundLocalError("local
-
variable 'b' referenced before assignment",),
-
<traceback object at 0x00D243F0>)
-
<type 'exceptions.UnboundLocalError'>
-
local variable 'b' referenced before assignment
-
'''
获取函数名和行号
上面介绍的方法二回打印出问题代码的行号,还有一些方法可以获取函数名和行号
-
#!/usr/bin/python
-
import sys
-
def get_cur_info():
-
"""Return the frame object for the caller's stack frame."""
-
try:
-
raise Exception
-
except:
-
f = sys.exc_info()[2].tb_frame.f_back
-
return (f.f_code.co_name, f.f_lineno)
-
-
def callfunc():
-
print get_cur_info()
-
-
-
if __name__ == '__main__':
-
callfunc()
-
import sys
-
def get_cur_info():
-
print sys._getframe().f_code.co_name
-
print sys._getframe().f_back.f_code.co_name
-
get_cur_info()
阅读(5041) | 评论(0) | 转发(2) |