当前位置: 首页 > 知识库问答 >
问题:

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

施敏达
2023-03-14

我正在学习Python并偶然发现了一个我无法理解的概念:try构造中的可选els块。

我感到困惑的是,如果try子句没有在try构造中引发异常,为什么必须执行代码--为什么不让它在相同的缩进级别上跟随try/except?我认为这将简化异常处理的选项。或者另一种询问方法是els块中的代码会做什么,如果它只是跟随try语句,而不是它,那么它就不会做什么。也许我漏掉了什么,请开导我。

这个问题和这个问题有点相似,但我找不到我要找的东西。

共有1个答案

武嘉祥
2023-03-14

只有当try中的代码没有引发异常时,els块才会执行;如果将代码放在else块之外,则无论异常如何,都会发生这种情况。而且,它发生在finally之前,这通常很重要。

当您有一个可能出错的简短设置或验证部分,然后是一个使用不希望隐藏错误的资源的块时,这通常很有用。您不能将代码放在try中,因为当您希望传播错误时,错误可能会转到子句。您不能把它放在构造之外,因为那里的资源肯定是不可用的,要么是因为安装失败,要么是因为最终破坏了所有内容。因此,您有一个else块。

 类似资料:
  • 主要内容:获取特定异常的有关信息Python 中,用 语句块捕获并处理异常,其基本语法结构如下所示: try:     可能产生异常的代码块 except [ (Error1, Error2, ... ) [as e] ]:     处理异常的代码块1 except [ (Error3, Error4, ... ) [as e] ]:     处理异常的代码块2 except  [Exception]:     处理其它异常 该

  • 在原本的 结构的基础上, Python 异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即 结构。 使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行。 举个例子: 可以看到,在原有 try e

  • 问题内容: 这是将python“ with”语句与try-except块结合使用的正确方法吗? 如果是这样,请考虑使用旧的处理方式: 这里的“ with”语句的主要好处是我们可以摆脱三行代码吗? 对于这个用例,这 似乎并不吸引我(尽管我知道“ with”语句还有其他用途)。 编辑:以上两个代码块的功能是否相同? EDIT2:前几个答案大体上谈及使用“ with”的好处,但是这里似乎没有什么好处。我

  • Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。 注意,和 else 语句不同,finally 只要求和 try 搭配使用,而至于该结构中是否包含 except 以及 else,对于 finally 不是必须的(else 必须和 try except 搭配使用)。 在整个异常处理机制中, finally 语句的功能是:无论 try 块是否

  • 下面的try with resources语句是来自Java文档的示例 根据文件, 用资源尝试语句确保每个资源在语句末尾关闭。 我的问题是,为什么我需要在try关键字之后立即在括号内声明资源。(如上面的BuffereReader) BufferReader实现了java。lang.AutoCloseable 所以为什么不支持这样的事情, 一旦退出尝试,就隐式关闭资源对象。(正如它所实现的自动关闭)

  • 问题内容: 我正在尝试制作一个函数来检查文件是否存在,如果不存在,则应打印错误消息并返回0。为什么这不起作用??? 问题答案: 如果要从except块内返回,则需要缩进返回0。另外,您的论点没有做任何事情。我假设您希望此功能能够测试任何文件,而不是为其分配文件句柄?如果不是,则不需要任何参数。