Python异常处理大全(二)

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

函数使用异常

看看这个:

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

Try...Except处理异常

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

执行以下代码:

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

然后输入一些浮点数:

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

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

现在让我们除以零:

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

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

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

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

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

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

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

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

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

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

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

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

使用Exception对象

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

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

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

多个except块和raise语句

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

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

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

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

感谢有你相伴,我们不见不散!

END

本公众号原创作品,未经授权禁止转载,特此声明,谢谢合作!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024A21LYT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券