异常处理
- 使用try...except捕获异常
- 在try块里出现异常时,会寻找相应的处理该异常对象的except块
- 在try块里出现异常时,找不到相应的except块,则运行终止,Python解释器也退出
- 捕获异常的时候,编程时先写子类的except块再写父类的except块(先捕获小异常,再捕获大异常)
- 异常信息访问
- agrs:返回异常错误的编号和描述字符串
- errno:返回异常错误的编号
- strerror:返回异常的描述字符串
- with_traceback():处理异常传播轨迹信息
- else块,在try块中没出现异常时,则会执行else块,如果出现异常,则不执行
- 如果有异常需要不被except块捕获,则可以把该段代码放入else块中
- 如果try块中打开了某些物理资源,这些物理资源需要显示被回收,当try块出现异常时,不一定能回收这些资源,而且在except块中又不一定会被执行到,导致这些物理资源不能被回收,要用finally块
- 不要在finally块中使用return或者raise等导致方法终止的语句,使用这些语句会导致try块和except块中的相应语句失效
- 用raise自行引发异常
- raise:单个默认引发RuntimeError
- raise +异常类:引发指定异常类
- raise+ 异常对象:引发指定异常对象
- except块和raise块同时使用,可以处理单个方法无法完成处理的异常
- 不要过度使用异常
- 不要使用过于庞大的try块
- 不要忽略捕获到的异常
- 要对捕获到的异常进行处理
- 重新引发新的异常
- 在适当的层处理异常