捕获异常
异常的完整代码是:
try:
raise Exception("wa")
except:
print("报错")
else:
print("没有报错")
finally:
print("程序关闭")
得到结果:
报错
程序关闭
一般程序里的 try
与except
是一对,如果没有报错,会执行到else
,不论是否有报错,都会执行finally
当异常发生时,会将异常的信息保存到sys.exc_info()
这个方法中
官方sys.exc_info()教程:https://docs.python.org/3/library/sys.html#sys.exc_info
使用sys.exc_info()可以得到:
- 报错类型(返回值位置1)
- 报错信息(返回值位置2)
- 报错信息回溯(返回值位置3)
基于报错信息可以额外得到:
- 报错的行数
- 报错的文件信息
详情请见【示例代码】
示例代码
import sys
import os
try:
raise RuntimeError('这里有个报错')
except Exception as e:
except_type, except_value, except_traceback = sys.exc_info()
except_file = os.path.split(except_traceback.tb_frame.f_code.co_filename)[1]
exc_dict = {
"报错类型": except_type,
"报错信息": except_value,
"报错文件": except_file,
"报错行数": except_traceback.tb_lineno,
}
print(exc_dict)
得到结果:
{
'报错类型': <class 'RuntimeError'>,
'报错信息': RuntimeError('这里有个报错'),
'报错文件': 'check_except.py',
'报错行数': 9
}
如果是完整的流程:
try:
print('正常的程序')
except:
print("报错")
else:
print("没有报错")
finally:
print("程序关闭")
得到结果:
正常的程序
没有报错
程序关闭