python - 为什么在 Python 的 try/except 构造中使用 else?

标签 python exception-handling try-catch

我正在学习 Python,并且偶然发现了一个我无法轻易理解的概念:try 构造中的可选 else block 。

根据 the documentation :

The try ... except statement has an optional else clause, which, when present, must follow all except clauses. It is useful for code that must be executed if the try clause does not raise an exception.

我感到困惑的是,为什么在 try 构造中有如果 try 子句没有引发异常则必须执行的代码——为什么不简单地让它跟随 try/except at相同的缩进级别?我认为这会简化异常处理的选项。或者另一种询问方式是 else block 中的代码会做什么,如果它只是跟在 try 语句之后,独立于它就不会完成。也许我遗漏了什么,请赐教。

这个问题有点类似于this one但我在那里找不到我要找的东西。

最佳答案

else block 只有在 try 中的代码没有引发异常时才会执行;如果您将代码放在 else block 之外,它就会发生而不管异常。此外,它发生在 finally 之前,这通常很重要。

当您有一个可能出错的简短设置或验证部分,然后是您使用您设置的资源但不想在其中隐藏错误的 block 时,这通常很有用。您不能将代码放在 try 中,因为当您希望它们传播时,错误可能会转到 except 子句。你不能把它放在构造之外,因为那里肯定没有资源,要么是因为设置失败,要么是因为 finally 把所有东西都拆掉了。因此,您有一个 else block 。

关于python - 为什么在 Python 的 try/except 构造中使用 else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387582/

相关文章:

python - 具有嵌套函数范围的 UnboundLocalError

go - 为什么 Go 除了错误处理之外还要添加 panic 和恢复?

php - 如何在 PHP 中使用 Try Catch 语句回滚对数据库所做的更改?

python - 如何确定 Python 类型错误的原因

python - 通过将变量传递给具有 yield 的递归函数来查找最小值

python - 如何提取pandas系列元素并将其与数据框列中的行进行比较

exception-handling - 如何在 web api 2 中记录 badrequest?

java - 在 Java 中抛出一个异常链表

java - 即使从未抛出异常,使用 try-catch block 是否昂贵?

python - 解析 Api 响应 Django 模块