异常处理
在程序的编写过程中会出现各种错误,语法错误在程序启动时就会检测出来,它是程序正常运行的前提条件。
程序中还有一种错误发生在程序运行后,可能是由于逻辑问题,又或者是业务发生了改变,为了能让用户有更好的体验,加强代码的健壮性,我们需要对这些错误进行处理,也叫异常处理。
回忆我们前面关于成绩评价的案例,当用户输入非数值时程序会发生什么?
>>> score = input('请输入你的成绩>>>:')
请输入你的成绩>>>:A
>>> score = float(score) # 转换类型
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'A'
代码直接报错,原因是输入的是字符串,不能转换成浮点数。
通过异常处理,可以在用户输入非法数值是进行提示,使程序有更好的体验。
在python中通过try-except
语句进行异常处理,基本的语法格式如下:
try:
<语句块1>
except <异常类型1>:
<语句块2>
except <异常类型2>:
<语句块3>
语句块1中的代码如果发生异常,且异常与类型对应的except
语句的异常类型相同则会被其捕获,从而执行对应的语句块。
>>> score = input('请输入你的成绩>>>:')
请输入你的成绩>>>:A
>>> try:
... score = float(score)
... except ValueError as e:
... print(e)
... print('请输入正确的成绩')
could not convert string to float: 'A'
请输入正确的成绩
除了try
和except
关键字外,异常语句还可以与else
和finally
关键字配合使用,语法格式如下:
try:
<语句块1>
except <异常类型>:
<语句块2>
...
else:
<语句块3>
finally:
<语句块4>
完整的执行流程图如下:
没有发生异常时,会执行else
语句后的代码块,不管有没有发生异常,finally
语句后的代码块一定会执行、
try:
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
index = input('请输入一个正整数>>>:')
index = int(index)
print(a[index])
except Exception as e:
print(e)
print('请输入一个正整数')
else:
print('没有发生异常')
finally:
print('我一定会执行')
上面的代码当输入的数不符合规则,或者输入的整数大于字符串的所有,都会抛出异常,然后会被捕获,else
语句里的代码不会执行,但是finally
里的代码会执行。