1.捕捉到异常后,出现异常的语句之后的代码就都不执行了,上代码:
try: print(name) print(1) print(2) print(3) except NameError as e: #将异常的值赋给e print('异常%s'%e) #异常name 'name' is not defined
2.如果有多个异常可以用多分支异常来处理,同样每次只会捕捉到一个异常,然后之后的代码不会执行,即使也是有其他异常捕捉的代码:
try: # print(name) print(1) print(2) dic = {} print(dic['name']) print(3) except NameError as e: print('异常%s'%e) except KeyError as e: print('异常%s'%e) #异常name 'name' is not defined
3.异常捕捉中也会用到else,else内的代码如果执行的话,必须else之前没有异常产生:
try: # print(name) print(1) print(2) dic = {} # print(dic['name']) print(3) except NameError as e: print('异常%s'%e) except KeyError as e: print('异常%s'%e) else: print('ok') #1 #2 #3 #ok
4.无论异常有没有产生都会执行的代码,需要用到finally:
try: print(name) print(1) print(2) dic = {} # print(dic['name']) print(3) except NameError as e: print('异常%s'%e) except KeyError as e: print('异常%s'%e) else: print('ok') finally: print('管它三七二十一') #异常name 'name' is not defined #管它三七二十一
try: # print(name) print(1) print(2) dic = {} # print(dic['name']) print(3) except NameError as e: print('异常%s'%e) except KeyError as e: print('异常%s'%e) else: print('ok') finally: print('管它三七二十一') #1 #2 #3 #ok #管它三七二十一
5.主动触发异常,代码本身正常执行不会触发异常,只是我们想‘规范代码的执行逻辑’,比如:
words = input('please input your age:').strip() if not words.isdigit(): raise TypeError('必须输入数字!!!') #please input your age:abc #Traceback (most recent call last): # File "E:/pythondir/异常处理/exception_deal.py", line 3, in <module> # raise TypeError('必须输入数字!!!') #TypeError: 必须输入数字!!!
6.断言,assert后面的条件不满足就会触发异常:
words = input('please input your age:').strip() assert words.isdigit() print('im %s years old'%words) #please input your age:abc #Traceback (most recent call last): File "E:/pythondir/异常处理/exception_deal.py", line 2, in <module> # assert words.isdigit() #AssertionError
7.自定义异常,即自定义一个异常类:
class myexceptinon(BaseException): def __init__(self,msg): super().__init__() self.msg = msg def __str__(self): return self.msg if 1 == 1: raise myexceptinon('没有定义') #Traceback (most recent call last): File "E:/pythondir/异常处理/exception_deal.py", line 13, in <module> raise myexceptinon('没有定义') #__main__.myexceptinon: 没有定义