【ptyhon】异常处理(10)

参考 Python从零开始系列连载,by 王大伟 Python爱好者社区

参考 Hellobi Live | 1小时破冰入门Python

参考 《简明python教程》

Note: 更多连载请查看【python】


目录


异常处理

  程序运行报错了,就是发生了异常情况!有时候我们想让系统提供更具体的异常信息,帮助我们解决问题。有时候我们想忽略本次异常,让程序继续执行下去。
  那我们到底该怎么控制呢?
  在Python中,我们将可能出现异常的代码放在使用try…except 结构创建的 ’ 隔离区 ’ 里运行。具体结构如下

try:
  可能引起异常的代码
except:
  对异常的处理代码


以下代码能捕获try中所有异常

try:
    x = float(input('请输入被除数:'))
    y = float(input('请输入除数:'))
    z = x/y
    print(z)
except:
    print('出问题啦!')

根据提示输入
比如

请输入被除数:10
请输入除数:2

结果为
5.0

以上是正常情况,try的代码部分没问题,所以相对的except的代码部分不会执行
如果输入如下

请输入被除数:10
请输入除数:0

结果为
出问题啦!

首先,系统没有报错,因为try中出错,则执行except中的内容,即打印‘出问题啦!’

当然,except会捕获try中所有可能出错的情况,但是except异常也分为很多种,比如值异常,命名异常等。因为这里是除0了,所以我们可以用除0异常来捕获这个异常。


ZeroDivisionError

用来捕获除数为0的异常

try:
    x = float(input('请输入被除数:'))
    y = float(input('请输入除数:'))
    z = x/y
    print(z)
except ZeroDivisionError:
    print('除数不能为0')

1)当输入为

请输入被除数:10
请输入除数:0

结果为
除数不能为0

没有报错,成功捕获异常

2)当输入为

请输入被除数:10
请输入除数:a

结果会报错

ValueError: could not convert string to float: 'a'

没能捕获异常,当出现的不是除0错误时候,用除0异常就不能捕获其他种类的异常


ValueError

try:
    x = float(input('请输入被除数:'))
    y = float(input('请输入除数:'))
    z = x/y
    print(z)
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('被除数和除数都应该是数值类型')

1)当输入为

请输入被除数:10
请输入除数:a

结果为
被除数和除数都应该是数值类型

成功捕获异常
2)当输入为

请输入被除数:10
请输入除数:0

结果为
除数不能为0

成功捕获异常


finally

try…except…finally…

当我们出现异常时候,可以采用捕获方法,如果异常没被捕获,则运行出错,但是有时,有些代码我们一定要让它运行(不管之前有没有运行出错),这时候,要在原先的try…except…结构中加入finally。

try:
    z = 1/0      
except ZeroDivisionError:
    print('除了0')
finally:
    print('我是一定会执行的')

结果为
除了0
我是一定会执行的

成功捕获异常


try:
    z = 1/0      
except ValueError:
    print('类型错误')
finally:
    print('我是一定会执行的')

结果为

我是一定会执行的
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-7-fa23f8c24e0c> in <module>()
      1 try:
----> 2     z = 1/0
      3 except ValueError:
      4     print('类型错误')
      5 finally:

ZeroDivisionError: division by zero

虽然结果会报错

ZeroDivisionError: division by zero

但是

我是一定会执行的

还是被打印出来了

猜你喜欢

转载自blog.csdn.net/bryant_meng/article/details/79329524