异常处理

在程序的编写过程中会出现各种错误,语法错误在程序启动时就会检测出来,它是程序正常运行的前提条件。

程序中还有一种错误发生在程序运行后,可能是由于逻辑问题,又或者是业务发生了改变,为了能让用户有更好的体验,加强代码的健壮性,我们需要对这些错误进行处理,也叫异常处理。

回忆我们前面关于成绩评价的案例,当用户输入非数值时程序会发生什么?

>>> 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'
请输入正确的成绩   

除了tryexcept关键字外,异常语句还可以与elsefinally关键字配合使用,语法格式如下:

try: 
    <语句块1>
except <异常类型>:
    <语句块2>
...
else:
    <语句块3>
finally:
    <语句块4>

完整的执行流程图如下:

1659693319205

没有发生异常时,会执行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里的代码会执行。

posted @ 2022-08-20 15:33  python心蓝  阅读(73)  评论(0编辑  收藏  举报