1.再次回顾程序结构
程序由模块组成,模块中包含了语句块,语句块中包含了表达式,表达式创建并处理对象。
2.异常的嵌套使用
如果try中嵌套try/except,将不会触发外层的except,如果外层有finally,是会执行的;
如果嵌套的内层有finally语句,且语句中有异常,则会触发外层的except。
3.空的except捕获异常
使用空的except,是对try中出现,但在后面的非空的except中没有被捕获的异常进行捕获(try后可以跟多个except)。
空的except语句用法很方便简洁,但不推荐使用,因为它会捕获我们不需要的异常,如内存错误、一般程序错误、迭代停止、键盘中断以及系统退出等。
所以,有时推荐使用except Exception as e:......,但也要注意一个问题,Exception是所有内置异常的超类,除了系统退出事件之外,它还是会捕获一般程序错误。
4.对异常进行存储
try:
......
except Exception as e:
logging.error(e) # e可以理解为异常类的实例对象
上面的处理和下面内容相似,
try:
......
except:
import sys
print(sys.exc_info()[0]) # sys.exc_info()是一个元组,没有异常时为三个None,如果有,则是(type,value,traceback)
# type,异常类型;vaue,异常类的实例对象(类似上面的e);
# traceback,一个traceback对象,异常最初发生时所调用的堆栈。