联系代码:
#需求,当程序遇到问题时,不让程序结束,而越过错误继续向下执行 #try....except....else ''' 格式:try: 语句t except 错误嘛码 as e: 语句1 except 错误嘛码 as e: 语句2 ... else 语句n 注意:语句else可有可无 ''' try: # print(3/0) # print(num) print(3/1) except ZeroDivisionError as e: print("被除数为0") except NameError as e: print("没有该变量") else: print("代码没问题") print("*************") #使用except而不使用任何错误类型 try: print(4/0) except: print("程序出现异常") print("*************") #使用except带走多种异常 try: print(5/0) except (NameError,ZeroDivisionError): print("出现NameError或ZeroDivisionError") print("*************") #特殊 #1.错误其实是class,所有的错误都继承自BaseException,所以在捕获的时候,它捕获该类型的错误,还把子类一网打尽 try: print(5/0) except BaseException as e: print("异常1") except ZeroDivisionError as e: print("异常2") print("*************") #2 跨越多层调用,main调用 func2,func2调用 func1,func1出现异常 def func1(num): print(1/num) def func2(num): func1(num) def main(): func2(0) try: main() except ZeroDivisionError as e: print("异常3") print("*************") #try....except....finally ''' 格式:try: 语句t except 错误嘛码 as e: 语句1 except 错误嘛码 as e: 语句2 ... finally 语句n 作用:语句t是否有错误,都要执行finally ''' try: print(1/0) except NameError as e: print("为0") except ZeroDivisionError as e: print("为0") finally: print("必须执行") print("*************") #断言 def func(num,div): assert (div != 0),"div 不能为0" return num / div print(func(10,2)) 运行结果:
D:\pycharm\python\venv\Scripts\python.exe D:/pycharm/python/020异常处理.py
3.0
代码没问题
*************
程序出现异常
*************
出现NameError或ZeroDivisionError
*************
异常1
*************
异常3
*************
为0
必须执行
*************
5.0
Process finished with exit code 0