Python之异常处理

1.程序在异常抛出的地方中断执行,如果不捕获,就会提前结束程序
raise语句
raise后什么都没有,表示抛出最近一个被激活的异常,如果没有被激活的异常,则抛类型异常
raise后要求应该是BaseException类的子类或者实例,如果是类,将被无参实例化

BaseException是所有内建异常类的基类

#sys.exit()函数引发的异常,如果异常不捕获处理,就直接交给python解释器,解释器直接退出
import sys
try:
    sys.exit(1)
except SystemExit:
    print('exit')
print('outer')

Exception及其子类

exception是所有内建的,非系统退出的异常的基类,自定义异常应该继承自它
SyntaxError语法错误,Python将这种错误也归到异常类下面的exception子类,但是这种错误是不可捕获的

ArithmeticError

所有算数计算引发的异常,其子类有除零异常等

LookupError

使用映射的键或者序列的缩影无效是引发的异常的基类:IndexError,KeyError

自定义异常

从exception继承得类  
捕获原则,从小到大,从具体到宽泛,捕获不到就向外抛出异常,如果被一个exception语句捕获,其他的就不会在捕获异常了  

as子句

被抛出的异常应该是异常的实例,使用as子句去获得这个对象
class Myexception(Exception):
    def __init__(self,code,message):
        self.code = code
        self.message = message

try:
    raise Myexception('400','error')
except Myexception as e:
    print('{}-->{}'.format(e.code,e.message))

finally子句

finally最终,即最后一定会执行的,try。。。finally语句中不管是否发生了异常都要执行finally
open函数打开文件失败就不会赋值给f ,如果不给f=None 判断f 还会抛出error
f = None
try:
    f = open('abcdefg')
except Exception as e:
    print('{}'.format(e))
finally:
    print("clean workstation")
    if f:
        f.close()
    # f.close()

try的工作原理

1.如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句
2.如果try中语句执行发生异常,却没有匹配的except子句,异常将被递交到外层try,还不处理,继续抛出,还不处理终止异常所在的线程
3.如果在try执行时没有发生异常,将会执行else子句中的语句
4.无论try中是否发生异常,finally子句都会执行

  

猜你喜欢

转载自www.cnblogs.com/harden13/p/9061510.html