干货!python妙招-异常处理之try-except

Python中检测处理异常是非常重要的,这可以增加代码的健壮性,我们在写python程序的时候,会可能会遇到一些不可预料的情况,一旦遇到这些情况,运行时程序便可能会崩溃。

比如:读写文件时候文件打开错误或者文件写入错误,写爬虫时网络请求失败,返回错误404.再或者函数处理一些不确定参数时候,都可以用到异常捕获。

异常可以通过 try 语句来检测. 任何在 try 语句块里的代码都会被监测, 检查有无异常发生。

try 语句有两种主要形式:try-excepttry-finally. 这两个语句是互斥的, 也就是说你只能使用其中的一种 . 一个 try 语句可以对应一个或多个 except 子句 , 但只能对应一个finally 子句, 或是一个 try-except-finally 复合语句.

1、try-except 语句

try-except 语句(以及其更复杂的形式)定义了进行异常监控的一段代码, 并且提供了处理异常的机制.

最常见的 try-except 语句语法如下所示,它由try块和except块 (try_suite 和 except_suite )组成, 也可以有一个可选的错误原因。首先尝试执行 try 子句, 如果没有错误, 忽略所有的 except 从句继续执行,如果发生异常, 解释器将在这一串处理器(except 子句)中查找匹配的异常。

简单用法(except后面不跟特定异常,这会捕获所有异常)这种好处就是你不知道会发生什么异常,尽管用;坏处就是当异常发生时候,不能清楚了解到底发生哪种异常。

我们可以发现,连接没有成功,但程序是正常运行的,会继续往下运行如果没有try,程序则会中断报错。我们发现第一个print并没有运行,这是因为try 语句块中异常发生点后的剩余语句永远不会到达(所以也永远不会执行)。

下面这个是捕获特定异常的,其他异常不会被捕获:

2、带有多个 except 的 try 语句

可以把多个 except 语句连接在一起, 处理一个 try 块中可能发生的多种异常, 如下所示::

首先尝试执行 try 子句, 如果没有错误, 忽略所有的 except 从句继续执行. 如果发生异常, 解释器将在这一串处理器(except子句)中查找匹配的异常,如果找到对应的处理器, 执行流将跳转到这里。

示例代码:

运行结果:

3、处理多个异常的 except 语句

我们还可以在一个 except 子句里处理多个异常. except 语句在处理多个异常时要求异常被放在一个元组里:

上边展示了如何处理同时处理两个异常. 事实上 except 语句可以处理任意多个异常,前提只是它们被放入一个元组里 , 如下所示:

示例代码:

运行结果如下:

4、捕获所有异常

刚开始我讲过一个捕获所有异常的方法,不过这种方法不推荐使用,原因我上面说过,我们无法得知捕获的异常是什么。

我们可以用下面这种:

注意!注意!这是python2的捕获方法,在pytho3中为except Exception as e

示例:

关于捕获所有异常, 你应当知道有些异常不是由于错误条件引起的. 它们是 SystemExit 和KeyboardInterupt 。 SystemExit 是由于当前 Python 应用程序需要退出, KeyboardInterupt 代表用户按下了 CTRL-C (^C) , 想要关闭 Python .。在真正需要的时候, 这些异常却会被异常处理捕获,一个典型的迂回工作法代码框架可能会是这样:

总结:

核心风格:不要处理并忽略所有错误

Python 提供给程序员的 try-except 语句是为了更好地跟踪潜在的错误并在代码里准备好处理异常的逻辑. 这样的机制在其他语言(例如 C ) 是很难实现的. 它的目的是减少程序出错的次数并在出错后仍能保证程序正常执行. 作为一种工具而言, 只有正确得当地使用它,才能使其发挥作用。

码字不易,多多关注

下一篇讲try-finally 用法,多多关注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180308A0BTO400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券