一、什么是异常
当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是bug
二、异常的捕获方法
当我们的程序遇到bug,那么就下来有两种情况
①整个程序因为一个bug停止运行
②对bug进行提示,整个程序继续运行
捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。
1、捕获常规异常
(一)基本语法
try:
可能发生错误的代码
except:
如果出现异常执行的代码
(二)快速入门
需求:尝试以‘r’模式打开文件,如果文件不存在,则以‘w’方式打开
try:
f = open('python.txt', 'r, encoding = 'utf-8')
except:
f = open('python.txt', 'w, encoding = 'utf-8')
2、捕获指定异常
try:
print(1 / 0)
except NameError as a:
print(f'出现变量名称异常:{a}')
except ZeroDivisionError as b:
print(f'出现^异常:{b}')
3、捕获多个异常
try:
# print(name)
1 / 0
except (NameError, ZeroDivisionError) as a:
print(f'捕获到的异常是:{a}')
4、捕获全部异常
# 两种一样的写法,都可以捕获到全部异常
# 第一种方式
# try:
#
# except:
# 第二种方式
try:
# print(name)
1 / 0
except Exception as a:
print(f'出现异常了:{a}')
5、异常else/finally:
(这两个参数是可选的)
else表示的是如果没有异常要执行的代码
name = 'hello'
try:print(name)
except Exception as a:print(f'出现异常了,且为{a}类型')# finally一般用在文件的相关操作中,因为不管怎么最后都要关闭文件
finally:print('hello,不管怎样我都会在的')
三、异常具有传递性
1、怎么理解呢
当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02中,当func02也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递
需要注意的是:
当所有函数都没有捕获异常的时候,程序就会报错
程序结果:
2、代码示例
# 定义一个出现异常的函数
def func01():print('这是func01函数的起始')print(name)print('这是func01函数的结束')# 定义一个不会出现异常的函数
def func02():print('这是func02函数的起始')func01()num = 1 / 0print('这是func02函数的结束')# 定义一个函数调用上面的函数
def main():print('main函数开始执行')try:func02()except Exception as a:print(f'出现异常了,并且异常为:{a}')finally:print('我一直都在')print('main函数执行完毕')if __name__ == '__main__':main()
程序执行结果:
从程序的执行结果可以看出
①执行的是main函数
②进入函数func02
③进入函数func01
④由于函数func01中出现了错误,导致并非正常退出函数,而是中断函数
⑤执行finally
⑥输出最后一个print语句
四、总结
干货可能不多,但是的确不难,异常可以提高程序的健壮性,还是可以在之后自己开发的程序中加入异常捕获的。