Python_异常
- 一、异常类:Exception(父类)
• 1)==NameError==:变量未定义出现的异常
• 2)==SystaxError==:解释器发现语法错误
• 3)==ZeroDivisionError==:除数为0引发的异常
• 4)==IndexError==:引用了序列不存在的索引
• 5)==FileNotFoundError==:打开的文件不存在
• 6)==AttributeError==:引用对象属性错误
• 7)==KeyError==:引用字典键出现异常
• 8)==ValueError==:输入值的异常
- 二、异常处理方法
- 格式1
- 格式2
- 二、抛出异常
- 1、raise语句
- 2、assert语句
- 练习
一、异常类:Exception(父类)
1)NameError:变量未定义出现的异常
print(x)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-fc17d851ef81> in <module>
----> 1 print(x)
NameError: name 'x' is not defined
2)SystaxError:解释器发现语法错误
print(输出")
File "<ipython-input-2-a059c218dc13>", line 1
print(输出")
^
SyntaxError: EOL while scanning string literal
3)ZeroDivisionError:除数为0引发的异常
x=3
print(x/0)
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-3-05a4b0e8c31f> in <module>
1 x=3
----> 2 print(x/0)
ZeroDivisionError: division by zero
4)IndexError:引用了序列不存在的索引
x=[1,2,3]
print(x[3])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-4-4a15b24093c7> in <module>
1 x=[1,2,3]
----> 2 print(x[3])
IndexError: list index out of range
5)FileNotFoundError:打开的文件不存在
with open("aa.txt") as f:
text=f.read
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-5-9aefc80fb8e9> in <module>
----> 1 with open("aa.txt") as f:
2 text=f.read
FileNotFoundError: [Errno 2] No such file or directory: 'aa.txt'
6)AttributeError:引用对象属性错误
x=4
print(x.shape)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-794f52637314> in <module>
1 x=4
----> 2 print(x.shape)
AttributeError: 'int' object has no attribute 'shape'
7)KeyError:引用字典键出现异常
x={"name":'xin'}
print(x["nama"])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-8-f9df4bcb3387> in <module>
1 x={"name":'xin'}
----> 2 print(x["nama"])
KeyError: 'nama'
8)ValueError:输入值的异常
x=int(input("请输入整数:"))
请输入整数:x
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-27-19e32395f263> in <module>
----> 1 x=int(input("请输入整数:"))
ValueError: invalid literal for int() with base 10: 'x'
二、异常处理方法
格式1
# 格式1
try:
要测试的代码
except:
异常处理代码
try:
print(y)
except:
print("y没有定义")
print("测试完成!")
y没有定义
测试完成!
try:
print("开始测试!")
print("第一步")
n1=int(input("输入第一个数字:"))
n2=int(input("输入第二个数字:"))
print(n1/n2)
with open("aa.txt") as f:
text=f.read()
except ZeroDivisionError:
print("第二步")
print("0不能作为除数")
except ValueError:
print("第三步")
print("输入不是数字")
except Exception as err:
print("第四步")
print("出现其他错误异常:\n",err)
print("结束")
开始测试!
第一步
输入第一个数字:2
输入第二个数字:4
0.5
第四步
出现其他错误异常:
[Errno 2] No such file or directory: 'aa.txt'
结束
格式2
# 格式2
try:
要测试的代码
except:
异常处理代码
else:
没有异常的语句
finally:
无论是否发生异常都会被执行
try:
print("开始测试!")
print("第一步")
n1=int(input("输入第一个数字:"))
n2=int(input("输入第二个数字:"))
print(n1/n2)
with open("aa.txt") as f:
text=f.read()
except ZeroDivisionError:
print("第二步")
print("0不能作为除数")
except ValueError:
print("第三步")
print("输入不是数字")
except Exception as err:
print("第四步")
print("出现其他错误异常:\n",err)
finally:
print("第五步")
print("结束")
开始测试!
第一步
输入第一个数字:2
输入第二个数字:4
0.5
第四步
出现其他错误异常:
[Errno 2] No such file or directory: 'aa.txt'
第五步
结束
二、抛出异常
让程序在执行过程中主动抛出异常问题
1、raise语句
# 格式
raise 异常类对象 ("出现异常的提示信息")
x=int(input("请输入小于五的整数"))
if x>5:
raise ValueError ("输入的数据需小于五,您现在输入的是",x)
print("结束")
请输入小于五的整数6
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-24-ce2ded1a17a0> in <module>
1 x=int(input("请输入小于五的整数"))
2 if x>5:
----> 3 raise ValueError ("输入的数据需小于五,您现在输入的是",x)
4 print("结束")
ValueError: ('输入的数据需小于五,您现在输入的是', 6)
2、assert语句
# 格式
assert 逻辑表达式 data(data是字符串 提示文本)
等价于if not 逻辑表达式:
raise AssertionError (data)
try:
x=int(input("请输入小于五的整数"))
assert x<=5,"输入的数据大于五"
finally:
print("结束")
请输入小于五的整数6
结束
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-10-ec7fa80a7b43> in <module>
1 try:
2 x=int(input("请输入小于五的整数"))
----> 3 assert x<=5,"输入的数据大于五"
4 finally:
5 print("结束")
AssertionError: 输入的数据大于五
练习
假设成年人的体重和身高存在某种关系:
身高(cm)-100=标准体重(kg)
如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”否则显示“体重超标”或“体重不达标”
身高小于30cm 大于250cm为异常情况。
try:
h=int(input("请输入身高:"))
if h<30 or h>250:
raise ValueError ("身高输入异常")
raise Exception
g=int(input("请输入体重:"))
g_min=h-h*0.05
g_max=h+h*0.05
if g_min<=g<=g_max:
print("体重正常")
elif g<g_min:
print("体重不达标")
elif g>g_max:
print("体重超标")
else:
print("体重输入有误")
finally:
print("结束")
请输入身高:3
结束
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-34b7e314f661> in <module>
8 h=int(input("请输入身高:"))
9 if h<30 or h>250:
---> 10 raise ValueError ("身高输入异常")
11 raise Exception
12 g=int(input("请输入体重"))
ValueError: 身高输入异常
请输入身高:150
请输入体重:40
体重不达标
结束