3. 自定义异常:
- 自定义一个异常class,默认继承ExceptionError
- raise 抛出一个自定义的异常class的对象
class PasswordException(Exception): def __init__(self,pw,min_length): self.password=pw self.min_length=min_length def __str__(self): return "%s的密码错误,密码的最小长度为%s"%(self.password,self.min_length) def reg(username,password): if len(password) < 6: raise PasswordException(password,6)#抛出你指定的异常 else: print("用户名为:%s,密码为:%s"%(username,password)) try: #reg("zs","1245678") reg("zs","124") except Exception as ex: #两个except 会按照顺序先执行第一,如果第一个满足异常类型条件,进入第一excep。不会进入后面的except。 print("第一个except") print(ex) except PasswordException as ex: print("第二个exceph") print(ex)
对异常总结一下:
- try 放在可能会出错的代码块处,except捕捉并处理相应类型的异常,ExceptionError捕捉所有类型的异常
- 一旦捕捉到一个异常, 立即跳转至相应类型的except,跳过顺序执行的代码段
- 多个except会按照顺序依次捕捉相应类型的异常,但只会执行一个except就跳出当前的try---except区 (以"一个try---多个except"作为一个异常捕获区)
- else 是当try部分没有发生异常才执行,这个else可以没有
- 只要进入了当前这个try-except区,并且本区内写了finally,就一定会执行;当然finally也可以不写
- 注意到:若当前没有处理异常,将会向上层抛,直至抛到ExceptionError,由解释器处理