异常介绍
异常的概念
示例:
def show(n):
# 定义一个列表
list1 = [1, 2, 3, 4, 5]
# 从列表中获取数据
# print(list1[5]) # IndexError: list index out of range
print(list1[n])
if __name__ == '__main__':
show(5)
总结:
- 异常指是Python程序发生的不正常事件,异常可称为错误
- 当检测到一个错误时,Python解释器就无法正常继续工作,会出现一些错误提示信息,这些信息就叫做异常信息,这就是我们常说的bug。
- 通常情况下Python中的异常的名称是以Error结尾
常见的异常
示例:
# NameError、IndexError、KeyError、TypeError
print(12 + '12') # TypeError: unsupported operand type(s) for +: 'int' and 'str'
print('12' + 12) # TypeError: can only concatenate str (not "int") to str
dict1 = {
"key1": 123,
"key2": 321
}
print(dict1['key3']) # KeyError: 'key3'
print(a) # NameError: name 'a' is not defined
处理异常
捕获一个异常
示例:
# 创建一个列表
list1 = [1, 2, 3, 4, 5]
# 制造一个IndexError
try:
print(list1[6])
except IndexError:
print("发生了异常")
print("hello world")
总结:
- 当程序中遇到异常时,通常程序会出现崩溃情况,为了不让程序崩溃,我们使用try except来处理
捕获多个异常
示例:
# 创建一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 创建一个字典
dict1 = {}
# 建议在try中只写一行代码
try:
print(data[100]) # IndexError
print(dict1['key1']) # KeyError
except (IndexError, KeyError) as e:
# e此时就是异常信息
print(f"发生了{e}的异常")
总结:
- 当捕获多个异常时,可以将多个异常使用元组形式存入
捕获所有异常
示例:
# 创建一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 创建一个字典
dict1 = {}
# 建议在try中只写一行代码
try:
# print(data[300] / 0) # IndexError
print(dict1['key1']) # KeyError
except Exception as e:
# e此时就是异常信息
print(f"发生了{e}的异常")
总结:
- 在捕获异常的三种方式中,捕获所有异常方式是最简洁高效
- 在实际开发中,推荐使用捕获所有异常来处理所有有可能发生异常的代码
异常其它关键字
示例:
# 创建一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 创建一个字典
dict1 = {}
try:
print(data[5])
except IndexError as e:
print(f"发生了异常:{e}")
else:
print("程序正常运行")
finally:
print("无论有没有异常都会执行")
总结:
- 关键字else:表示当程序不发生异常时要执行的代码
- 关键字finally:表示程序无论发不发生异常时都会执行的代码,可以用于一些必须要完成的操作,比如关闭文件、关闭系统资源等操作
异常具有传递性
示例:
# 定义一个列表
list1 = [1, 2, 3, 4, 5]
# 定义函数func1
def func1():
print("这是func1开始---------------")
try:
print(list1[3] + '4')
except TypeError as e:
print(f"在func1中发生了异常,异常信息为:{e}")
# print(list1[3] + '4')
print("这是func1结束---------------")
# 定义函数func2
def func2():
print("这是func2开始---------------")
func1()
print("这是func2结束---------------")
if __name__ == '__main__':
try:
func2()
except Exception as e:
print(f"在main函数中发生了异常,异常信息为:{e}")
总结:
- 当一段代码可能会发生异常时,我们需要进行异常的捕获,当代码之间有嵌套时,异常会从里向外传递
- 如果我们在最外层代码进行异常捕获,可以捕获到所有的代码异常,一般用Exception