当异常被触发之后,程序不会再运行
异常处理的作用:
尽量让程序正常运行
尽早发现问题,尽早解决问题
异常类型
-IndexError
# 1.IndexError
mlist = [5,6,7]
print(mlist[100])
当异常被触发,接下来的代码就不会再运行
- NameError
#2.NameError
#变量异常
print(a)
#没有定义变量,找不到变量
使用一个还没赋予对象的变量
使用一个变量的时候一定要确保它定义了
- SyntaxError
#3.SyntaxError
#语法错误
print("hello"))
#对python语法不熟悉
代码逻辑语法出错,不能执行,不能捕获
-ImportError
#8.ImportError
from homework.list_change_dict import abc
key = [1,2,3]
a = get_dict(key,value)
print(a)
#无法引入模块的变量
无法引入模块的变量
-TypeError
#7.TypeError
from homework.list_change_dict import get_dict
key = [1,2,3]
a = get_dict(key)
print(a)
#传入的对象类型与要求不符合
传入的对象类型与要求不符合
-ModuleNotFoundError
#9.ModuleNotFoundError
from list_change_dict import get_dict
key = [1,2,3]
a = get_dict(key,value)
print(a)
#没有找到该模块
没有找到该模块
- KeyError
#4.KeyError
#键异常
dict_1 = {"name":"conlin"}
print(dict_1["age"])
#字典里没有这个键
试图访问你的字典里的不存在的键
-ValueError
#5.ValueError
#数据异常
print(int("abc"))
#输入的值异常,比如要输入数字.但是输入了字符串.一般出现在input数字进行计算时
传入一个不被期待的值,即使类型正确
-IOError
文件操作 输入输出异常
处理异常
-分析问题
- 异常在python一般会出现提示
- 分析异常提示
- 会提示在哪个文件,哪一行代码出现异常
- 再把异常类型,信息,复制出来,搜索
-异常捕获
- 找到异常类型
- 异常分析
- 找到触发异常的代码
语法:
把可能会出现异常的代码写入try里
try:
可能出现异常的代码
如果正常执行 则不会被捕获 不会执行except
如果触发异常,则到except
except 异常类型的名称 as 变量名:
出现异常后的操作
无论是否捕获异常,都不会影响下面程序的运行
把具体的异常内容放到一个变量里,可以打印出来
except后面加了异常类型的名称后代表只捕获指定的异常类型
不写异常类型名称或者用exception,表示捕获所有的异常,不要轻易使用,不同的异常类型,要用不同的方案处理
#捕获指定类型
a = [1,2,3]
index = 100
try:
value = a[index]
1/0
print("触发异常了吗")
except IndexError as err:
#只捕获IndexError
#把具体的异常信息放到一个变量
print(f"""index索引出现问题,比较严重,麻烦修复:{err}""")
except ZeroDivisionError as e:
print(f"""计算错误,首要错误,通知工程师{e}""")
#不能同时触发2个异常,只能捕获一个异常
print("继续运行")
照代码从上到下运行的顺序,当执行到value=a[index]的时候,因为出现异常,马上被except捕获,
所以之后的1/0不会执行,也不会被第二个except捕获
-异常类型的具体用法
#具体用法
#开始先不要写try,当程序已经报错了再写
#输入abc
age = input("输入年龄")
try:
age = float(age)
if age > 18: #要正常执行后才能继续操作,不能放在异常处理的外面,因为异常还没解决
print("成年人")
else:
print("未成年")
except ValueError as e:
print("你输入的是字母,请输入错误")
出现异常的代码是age = float(age)
如果if写在try外面,仍然会报错,因为age还没执行转换
要能够正常执行操作才能继续判断
try...except...else
当程序没有出错的时候,会执行else的语句,要是出错被捕获.则不执行else
age = input("输入年龄")
try:
age = float(age)
except ValueError as e:
print("你输入的是字母,请输入错误")
else:
if age > 18:
print("成年人")
else:
print("未成年")
-主动抛出异常
异常类型和信息可以自定义
raise 主动抛出异常信息,一般接在判断语句后面
#主动抛出异常
def add(a,b):
#a,b带有要求
if a >10 or b < 3:
raise ValueError("输入数据有误")
c = a + b
return c
print(add(6,1)
利用异常捕获
#主动抛出异常
def add(a,b):
#a,b带有要求
if a >10 or b < 3:
raise ValueError("输入数据有误")
c = a + b
return c
try:
a = add(6,1)
print(a)
except ValueError as err:
print(err)