异常
常见异常
类名 | 描述 |
---|---|
Excepion | 所有异常的基类 |
AttributeError | 特性引用或者赋值失败时出现 |
IOError | 试图打开不存在的文件时出现 |
IndexError | 在使用序列中不存在索引时出现 |
KeyError | 在使用映射中不存在的键时出现 |
NameError | 找不到名字(变量)时出现 |
SyntaError | 在代码错误时出现 |
TypeError | 在内建操作或者函数应用于错误类型时出现 |
ValueError | 在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时出现 |
ZeroDivisionError | 在除法或者模操作的第二个参数为零时出现 |
处理异常,捕获异常
try:被检测的语句
pass :空语句只占位
except :处理异常的语句
“try”子句块中编写可能出现异常的语句,“ except ”子句中的语句块处理处理异常,如果“ try ”中语句出现异常并成功被“ except ”中语句成功处理,就不会因报错使程序终止,具体效果如下:
try:
num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))
print(num1,"/",num2,"=",num1/num2)
except ZeroDivisionError:
print("输入有误,分母不能为零!")
except ValueError:
print("输入类型有误")
运行结果1、(出现分母为零的异常)
请输入第一个数字:2
请输入第二个数字:0
输入有误,分母不能为零!
运行结果2、(出现输入类型错误)
请输入第一个数字:w
输入类型有误
运行结果3、(无异常)
请输入第一个数字:9
请输入第二个数字:7
9.0 / 7.0 = 1.2857142857142858
获取异常信息
精确捕获需要把子类异常放在父类异常之前,在不知道具体的异常信息是,可以使用所有异常的基类“ Excepion ”去处理异常使用“ as ”去获取具体的异常信息,具体操作如下
try:
list_data= [1,2,3,4]
print(list_data [8])
except Exception as e :
print(e)
输出结果:
list index out of range#列表索引超出范围
try:
1/0
except Exception as e :
print(e )
输出结果:
division by zero
raise :主动抛出一个异常
try:
raise ZeroDivisionError("信息")
except Exception as e :
print(e )
输出结果:
信息
finally 无论有没有异常都会执行,一般都是一些关闭或者清理的操作
else在finally前面except后面,没有异常就会执行else的语句
try:
num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))
except ZeroDivisionError:
print("输入有误,分母不能为零!")
except ValueError:
print("输入类型有误")
else: print(num1,"/",num2,"=",num1/num2)
finally:print("程序结束")
运行结果1、:(无异常)
请输入第一个数字:7
请输入第二个数字:9
7.0 / 9.0 = 0.7777777777777778
程序结束
运行结果2、:(有异常)
请输入第一个数字:w
输入类型有误
程序结束