Python中异常的捕获与处理详解
作者:史上最强踩坑王
异常是什么
Python异常是指在程序运行中所产生的错误,即代码在无法正常执行的情况下就会产生异常。
这个错误可以是Python内置的错误类型,也可以是开发者自定义的错误类型。
一、异常捕获的框架
针对异常捕获有几种组合使用,针对于不同的场景使用不同的方法,在介绍组合使用的方法之前,先说一下异常捕获的框架
第一种框架:
try: # 此处放你觉得将会出现异常的代码,放这里 except 异常类型 as 变量: print(变量)
第二种框架:
这里不写异常类型和变量,也是可以的,因为 python 解释器内部有一个基类(object),就是异常的基类 Exception ,系统会自动根据你出现的异常类型,去给你打印对应的异常内容
try: # 此处放你要可能要出现异常的代码 except: # except 后面也可以不写异常类型和变量 print()
异常类型有很多种,例如:
NameError、ZeroDivisionError、list index out of range
- 变量没有定义出现的异常
- 除数不能为0的异常
- 使用索引去取值的时候,超过了索引的范围的异常
针对于第一种变量没有定义的异常,这里我在 pycharm 中直接输入了一个字母 a,很显然,我没有定义变量 a 然后就去运行就报出了异常
二、try-except 组合
- try-except
- try-except-else
- try-except-finally
第一种组合:try-except
# 当变量没有定义的异常 try: a # try 与 except 之间写可能会出现异常的代码 except NameError as s: # NameError 为异常的类型 print(s)
如下图输出的为:异常类型所对应的类型
-当除数不为0的时候,这里要理解,当没有异常的时候,只会执行 try 里面你写的正常的代码,而不会去执行 except 里面的代码,所以不必去担心,当我程序运行正常,也会执行 except 里面的代码,而对执行的结果有影响
# 当除数不能为0的异常 try: a = 0 b = 9 c = a / b # 当没有异常的时候,只会执行 try 里面的代码,而不会执行 except 里面的代码 print(c) except ZeroDivisionError as zero: print(zero)
上面运行的结果如下图,输出了变量 c 的结果,程序没有异常,所以就没有执行except
-当除数为0的情况,有异常的时候
第二种组合:try-except-else
这种组合用的较少
# try-except-else 结构,当没有异常的时候,就会执行 else 里面的代码 try: a = [1,2,3,4,5] b = a[2] except IndexError as index_a: print(index_a) else: print(b)
输出的结果为:3,因为没有异常,所以也就没有执行 except 里面的代码,也就执行了 else
这种其实就跟我们正常的 try-except 组合很像,只不过这里单独 加了一个 else 关键字而已
让其输出结果,没有什么特别之处
第三种组合:try-except-finally
使用的次数很多,这里多加了一个保留字 finally 就是不管是否有异常,都会执行 finally 里面的代码
使用场景就是我可能在日常写代码的时候,我知道某一个地方可能会出现异常,但是我不管里面是否真正的出现异常,我都继续执行其它的代码
# try-except-finally 结构,不管代码是否有异常,最后都会执行 finally 里面的代码 try: a = [1,2,3,4,5] b = a[2] except IndexError as index_b: print(index_b) finally: print("列表索引超出了范围")
- 没有异常的时候,输出 finally 里面的代码
- 有异常的时候
# 1.try-except-finally 结构,不管代码是否有异常,最后都会执行 finally 里面的代码 # 2.except 后面也可以不写异常类型,因为系统默认认为后面的错误类型是 Exception,这是一个基类,包含了所有的出错类型 try: a = [1,2,3,4,5] b = a[10] except: print("list index out of range") finally: print("列表取值的索引值超出了范围")
- 有异常的时候,也执行了 finally 里面的代码,注意,这里使用的是第二种结果,也就是一开始所讲的,except 后面没有跟保留字
第四种组合:try-except-except
当要写的代码中可能要出现两个异常的时候,这里就可以再添加一个 except 保留字
但是,这里只会执行第一个 except 里面的内容
如下,当除数为0的异常,我自定了一个打印内容:除数不能为0,却没有执行
""" 如下代码,有两个不同类型的异常,1.变量未定义,2.除数不能为0,这两处可能会出现异常 """ try: a b = 0 c = 9 d = c / b # 注意:当有多个 except 的时候,这里只会执行第一个 except 里面的代码,其余的不会执行,但是这样不会标红 except NameError as name: # 第一种写法,except 后面跟异常的类型 print(name) except: # 第二种写法,except 后面不跟异常类型,让其使用默认的 Exception 类,这是一个基类,包含了所有的出错类型 print("除数不能为0")
执行的结果如下图
到此这篇关于Python中异常的捕获与处理详解的文章就介绍到这了,更多相关Python异常捕获处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!