前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Exception

Exception

作者头像
Helloted
发布2022-06-07 13:30:48
4040
发布2022-06-07 13:30:48
举报
文章被收录于专栏:Helloted

在基本术语中,我们知道try / except语句。 将可能导致异常发生的代码放在try块中,异常处理在except块中执行。 这是一个简单的例子:

代码语言:javascript
复制
try:
    file = open('test.txt', 'rb')
except IOError as e:
    print('An IOError occurred. {}'.format(e.args[-1]))

在上面的例子中,我们只处理IOError异常。 大多数初学者不知道的是,我们可以处理多个异常。

1、处理多个异常

我们可以使用三种方法来处理多个异常。 第一个涉及把可能发生在元组中的所有异常。 像这样:

代码语言:javascript
复制
try:
    file = open('test.txt', 'rb')
except (IOError, EOFError) as e:
    print("An error occurred. {}".format(e.args[-1]))

另一种方法是处理单独的except块中的个别异常。 我们可以有尽可能多的except块。 这里是一个例子:

代码语言:javascript
复制
try:
    file = open('test.txt', 'rb')
except EOFError as e:
    print("An EOF error occurred.")
    raise e
except IOError as e:
    print("An error occurred.")
    raise e

这样,如果异常不是由第一个except块处理,那么它可能由后面的块处理,或者根本不处理。

现在最后一个方法涉及所有的异常:

代码语言:javascript
复制
try:
    file = open('test.txt', 'rb')
except Exception:
    # Some logging if you want
    raise

当您不知道程序可能抛出的异常时,可以这样做。

2、finally

我们将我们的主要代码包装在try子句中。 之后,我们将一些代码包装在一个except子句中,如果在try子句中包装的代码中发生异常,except语句它将被执行。 在这个例子中,我们将使用第三个子句也就是finally子句。 无论是否发生异常,包装在finally子句中的代码将运行。 它可能被用来在脚本之后执行清理。 这是一个简单的例子:

代码语言:javascript
复制
try:
    file = open('test.txt', 'rb')
except IOError as e:
    print('An IOError occurred. {}'.format(e.args[-1]))
finally:
    print("This would be printed whether or not an exception occurred!")

# Output: An IOError occurred. No such file or directory
# This would be printed whether or not an exception occurred!
3、try/else

通常情况下,如果没有发生异常,我们也可能需要运行一些代码。 这很容易通过使用else子句来实现。 有人可能会问:为什么,如果你只想要一些代码运行,如果没有发生异常,你不会简单地把这个代码放在try中吗? 答案是,那么代码中的任何异常都会被尝试捕获,而你可能不希望这样做。 大多数人不使用它,老实说,我自己没有广泛使用它。 这里是一个例子:

代码语言:javascript
复制
try:
    print('I am sure no exception is going to occur!')
except Exception:
    print('exception')
else:
    # any code that should only run if no exception occurs in the try,
    # but for which exceptions should NOT be caught
    print('This would only run if no exception occurs. And an error here '
          'would NOT be caught.')
finally:
    print('This would be printed in every case.')

# Output: I am sure no exception is going to occur!
# This would only run if no exception occurs.
# This would be printed in every case.

else 块将会在没有异常发生时执行,并且在finally块之前执行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、处理多个异常
  • 2、finally
  • 3、try/else
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档