文章目录
1. 异常介绍
1.1 什么是异常
Python中的异常指的是Python程序发生的不正常事件。
有时候,异常也可称为错误。
当检测到错误时,Python解释器就无法继续执行,此时会出现一些错误的提示,这就是异常,也就是我们常说的BUG。
实例:
(1)定义一个列表变量;
(2)获取一个远超列表索引值的元素,报错:IndexError。
# 异常
datas = [1,2,3]
print(datas[100]) # IndexError: list index out of range
1.2 制造常见的异常
(1)使用案例来制造出几个常见异常;
(2)比如:NameError、IndexError、KeyError、TypeError等。
# 1.NameError: 直接使用未定义的变量
print(a)
# 2.IndexError
strs = "hello"
print(strs[100])
# 3.KeyError
dicts = {}
print(dicts["name"])
# 4.TypeError
print("hello"+666)
strs = "hello"
print("结果:%d"%strs)
# 5.FileNotFoundError ..
open("./test.txt","r")
2. 常见异常处理方式
2.1 快速入门异常
当程序中遇到了异常时,通常程序会出现崩溃情况。
为了不让程序崩溃,就可以使用异常来快速处理。
异常处理语法:
try:
可能发生异常的代码
except:
出现异常时, 执行的代码
实例:
(1)制造出一个IndexError异常;
(2)使用异常来快速处理这段可能会产生IndexError的代码。
# 1.制造异常
# 2.处理
try:
datas = [1,2,3]
print(datas[100]) # 中断
except:
print("已经发生了异常。。。")
print("1111") # 当处理了异常后,程序可以稳定继续往后执行代码
2.2 捕获多个异常
捕获异常是处理异常的标准形式。通常情况下,捕获异常分为三类:
(1)捕获一个指定的异常
(2)捕获多个异常
(3)捕获所有异常
接着,来看看捕获一个指定异常
的语法:
try:
可能发生异常的代码
except 异常类型名:
当捕获到该异常类型时,执行的代码
捕获多个异常指的是:可以对一段可能发生异常的代码做多个异常类型的判断处理。
捕获多个异常
语法:
try:
可能发生异常的代码
except (异常类型1,类型2,...):
如果捕获到该异常类型时,执行的代码
实例:
(1)有一段可能发生IndexError、KeyError的代码;
(2)使用多个except做异常处理;
(3)使用捕获多个异常的方式来处理代码片段。
# 1.可能发生异常
try:
data = [1,2,3]
print(data[100])
# 2.捕获
except IndexError:
print("发生异常。。。")
# 1.可能发生异常的代码
try:
# dicts = {}
# print(dicts["name"])
data = [1,2,3]
print(data[100])
# 2.处理异常
# except IndexError:
except IndexError as error:
print(f"可能会发生异常.=={error}")
except KeyError:
print("可能会发生keyerror...")
print("11111111111111")
try:
dicts = {}
print(dicts["name"])
data = [1,2,3]
print(data[100])
# 2.处理异常
# except IndexError:
except (IndexError,KeyError) as error:
print(f"可能会发生异常.=={error}")
2.3 捕获所有异常
捕获所有异常语法:
try:
可能发生异常的代码
except Exception[ as 变量]:
当捕获到该异常类型时,执行的代码
实例:
(1)有一段可能发生IndexError、KeyError的代码;
(2)使用捕获所有异常的形式来处理。
# 1.可能会发生异常的代码
# 2.捕获所有异常
try:
data = [1, 2, 3]
print(data[100])
dicts = {}
print(dicts["name"])
except Exception as error:
print(f"发生了异常信息...{error}")
print("hello world..")
总结:
(1)在捕获异常的三种方式中,捕获所有异常的方式最简洁高效;
(2)在实际应用开发中,推荐使用捕获所有异常的方式来处理可能发生异常的代码。
2.4 异常的其他关键字
在捕获异常过程中,有两个关键字else、finally需要注意:
else:表示如果没有异常时,要执行的代码;
finally:表示的是无论是否有异常,都要执行的代码。
当把else、finally都放入到捕获异常中,语法:
try:
可能发生异常的代码
except 异常类型:
当捕获到该异常类型时,执行的代码
else:
没有异常信息时,执行的代码
finally:
无论如何,都会执行的代码
实例:
(1)有一段可能发生IndexError的代码片段;
(2)使用else关键字处理不发生异常的情况;
(3)使用finally关键字处理发生、不发生异常的情况;
(4)执行程序,观察效果。
# 1.制造异常
# 2.处理 指定异常
try:
data = [1, 2, 3]
print(data[100])
# print(data[0])
except IndexError:
print("====1====已发生异常信息!")
else: # 3.else:没有发生异常时,处理的事情
print("没有发生异常时,才会执行代码!!")
finally:# 4.finally:文件必须关闭
print("无论如何,都会执行finally!!")
总结:
(1)关键字else、finally可以配合异常处理一起使用;
(2)注意:当使用finally部分代码时,可以用于完成一些必须完成的操作,例如关闭文件、关闭系统资源等。
2.5 异常具有传递性
当一个函数发生异常并没有捕获处理时,异常会被传递到调用该函数的地方。 如果调用函数的地方也没有捕获处理异常,那么 异常会继续向上层调用的地方传递,直到遇到能够处理异常的地方或者到达程序的最顶层(如main
函数)。