python处理流程-Python异常处理大全(二)

原标题:Python异常处理大全(二)

37688796ce1d4b7b9f8b5ff4b2273d90.gif

本文是Python异常处理教程的第二部分,上部分我们简单的介绍了几种异常,及其处理办法,这部分我们将更详细地对Python中产生的异常处理方法进行探讨。

函数使用异常

看看这个:

3ef4a68844c642be81030e6d8fba9a6f.jpg

如果some_function引发异常,则在运行此脚本时,将永远不会调用another_function,进而导致程序无法运行。这种机制可能会使您的代码变得容易出现异常和不透明,因此应该谨慎处理。

Try...Except处理异常

我们这里使用Python3语法,它与Python2略有不同,但它们基本上以相同的方式运行。

执行以下代码:

568d885cbafd496180134adb509c8312.jpg

首先让我们输入一些整数:

25e026bf9c63473396beca241b899a1e.png

然后输入一些浮点数:

33689056544d48d2b33d1ecc0491b761.png

现在让我们来输入一些文本:

4cd29d2476344b6894ee6f09251ccc5a.png

这是我们需要程序能够从中恢复的异常情况,我们需要了解用户界面开发的黄金规则之一的说明:总要想着您的用户会做出各种奇怪的事情!每次用户犯错误时,您的程序都不应该崩溃!

现在让我们除以零:

62aa619a762f40ad8477d26ed8a6bd17.jpg

然后尝试运行程序,并在运行中按Ctrl+C:

5042f39092814f8eacb16e72f0ed4e3c.jpg

最后一个异常并不是一个错误,也许用户想要退出程序,这完全没问题且应该接受。

现在为了解决上述问题,我们来让我们的代码更加稳健,首先介绍一个关于从用户那里获取有效信息的功能:

d0d988a17ff94f00be518f30096946f5.jpg

让我们仔细看看get_user_input函数。正如我们从上文代码所知,float(input(f"{message}: "))可能因用户输入产生异常。我们希望程序能够自动从该异常中恢复,所以我们把它放在一个try块中。然后,except块说明如果发生异常该怎么办。

现在让我们尝试运行程序并输入一些无效的数字:

a3f5a06d754647308680dbf66fa3da02.png

很棒!现在我们已经可以处理无效的输入。但是这段代码存在严重问题!你能发现它吗?

让我们在程序运行完毕之前尝试退出程序(Ctrl + C):

812418a316bb497bacd9de2ff6ccb444.jpg

问题是except块不关心它捕获的异常类型。我们只让它捕获ValueErrors,并让其他每个Exception都能正常运行。

我们将函数更改为如下所示:

3c8b52605a4e4e97a3b357ea549ce27d.jpg

然后我们再次运行脚本。这次我们输入一个无效的数字,然后尝试中途退出:

e9853d56a7694214b6ac33e9fbd4ecdb.jpg

现在我们可以让程序自动从一些用户错误中恢复,但是......当用户试图退出时,程序输出非常难看。让我们来做以下改变:

c5206a1f689d451faa710ef9109748ed.jpg

现在,如果用户按下Ctrl + C终止程序,他们将收到一条消息而不是错误代码。请注意try模块包含的范围,这意味着在执行任何这些行期间的任何时刻发出的任何键盘中断都将被except块捕获并处理。

使用Exception对象

接下来,让我们的ValueError错误消息提供更多信息:

95b66ff2d130410d9bf08649eed9c6cb.jpg

如果使用如上所示,则可以访问Exception对象。 在这种情况下,我们只是向用户显示实际的错误消息。注意,这不是一个完整的Traceback。另请注意,e是ValueError对象,它不是字符串!它只是一个非常友好的字符串表示。

再次运行程序并给它一些无效的输入:

f1e4577f7f8740fea89a41ea74ada334.jpg

多个except块和raise语句

让我们来使用更复杂的代码:

875f09a065be428299102f20b333e608.jpg

现在尝试在程序的不同位置按Ctrl + C. 我们在这里演示的是,如果需要,您可以在一个try中使用多个except块。因此,您可以以不同的方式处理不同的错误,这很方便。

然后通过使用raise,可以重新唤起被捕获的异常:

e6eabe46f2c9492ebf8c2cf71bf65264.jpg

今天的异常处理要比昨天的教程稍微复杂一些,但同样是很容易理解的,很适合新手的学习,明天我们将继续探讨Python中的异常处理。

感谢有你相伴,我们不见不散!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值