python异常处理
什么是异常
当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的异常,在默认情况下,程序会将异常的类型、产生原因、异常出现的位置打印到控制台上,并终止程序的执行
捕获异常
当程序出现了BUG,会出现两种情况
- 整个程序因为一个BUG停止运行
- 对BUG进行提醒,整个程序继续运行
在工作中,我们不能因为一个小BUG让整个程序全部崩溃,为了达到这种目的,需要做到捕获异常
捕获异常语法
基本语法格式
try:可能发生错误的代码
except:如果出现异常执行的代码
- 先执行try中的内容,看有没有问题,如果有问题,就会立即跳转到except中执行
- 如果try中没有问题,程序会跳过except,继续向下执行
例:尝试以r
模式打开文件,如果文件不存在,则以w
方式打开
try:f = open('a.txt','r')
except:f = open('a.txt','w')
捕获指定异常
try:print(name)
except NameError:print("name 变量未定义")
- 如果尝试执行代码的异常类型与要捕获的异常类型不一致,则无法捕获异常
- 一般try 下方只放一行尝试执行的代码
捕获多个异常
需要捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写
try:print(1/0)
except (NameError, ZeroDivisionError):print("ZeroDivisionError 问题")
捕获所有异常
try:print(name)
except Exception as e:print(e)
异常完整格式
异常else
else表示如果没有异常要执行的代码
try:print(1)
except Exception as e:print(e)
else:print("没有异常")
异常finally
finally 表示无论是否出现异常都要执行的代码,如关闭资源
try:f = open("a.txt", "r")
except Exception as e:f = open("a.txt", "w")
else:print('没有异常')
finally:f.close()
异常传递
def func01():print("func01开始")num = 1/0print("func01结束")def func02():print("func02开始")func01()print("func02结束")def main():try:func02()except Exception as e:print(e)main()
如上述代码所示,当函数func01
中发生异常,并没有捕获处理这个异常的时候,异常会传递到func02
,当func02
也没有捕获处理这个异常的时候,main
函数会捕获这个异常,这就是异常的传递性。
当所有函数都没有捕获异常的时候,程序就会报错。