处理异常的目的是保证程序在出现错误的时候,可以继续执行下去,而不会立即终止
语法: try: 代码块(可能会出错的语句) except 异常类型 as异常名: 代码块(出现错误的处理方式) except 异常类型 as 异常名: 代码块(出现错误的处理方式) … else: 代码块(没有错误时执行的语句) finally: 代码块(是否有异常都回执行)
print ('程序开始...') try: print(20/0) except print('程序出错啦') else; print('程序正常') finally: print('hello')通过上面的代码可以看出 1、如果函数中没有对异常进行处理,则异常会继续想函数调用处传播 2、当在函数中出现异常,若在函数中对异常进行处理,则异常不会传播 3、函数调用处对异常进行处理,则不在传播,如果没有处理,则继续向调用处传播,直到传播到全局作用域,如果依然没有处理,则程序停止,并且显示异常信息
当程序运行过程中出现异常以后,所有异常信息会被专门保存到一个异常对象中,而异常传播时,实际就是异常对象跑给了调用处
print('程序开始,异常出现前') try: print(A) print(20/0) except: print('程序出错了!!!') print ('异常出现后') print('程序开始,异常出现前') try: print(A) print(20/0) except NameError: print('出现NameError!!!') print ('异常出现后') print('程序开始,异常出现前') try: print(A) print(20/0) except Exception as e: print('程序出错了!!!') print(e,tpye(e)) print ('异常出现后')通过上面三个代码块可以看出: 1、except后面不跟任何内容可以捕获所有异常 2、except后面跟一个异常类型,则只会捕获该类型的异常 3、如果except后跟的是Exception 它会捕获到所有的异常 4、Exception 是所以异常类的父类
通过上面代码块可以看出,可以通过raise抛出异常信息, 抛出异常的目的,告诉调用者这里调用时可能出现问题,希望调用者处理下 raise后面需要跟一个异常类或者异常实例