什么是尝试 - 在Python中有好处?

dan*_*cek 8 python try-catch

我正在尝试学习Python的细节,我发现了try-else语句.

try1_stmt ::=  "try" ":" suite
               ("except" [expression [("as" | ",") target]] ":" suite)+
               ["else" ":" suite]
               ["finally" ":" suite]
Run Code Online (Sandbox Code Playgroud)

如果控制流出try子句的末尾,则执行可选的else子句.else子句中的异常不由前面的except子句处理.

我想不出这会有用的情况.通常,将代码放在try块的末尾或else块中没有实际区别.

else条款适用于什么?它是否用在一些真实世界的代码中?

Ray*_*ger 9

通常,将代码放在try块的末尾或else块中没有实际区别.

else子句有什么用处?

else子句本身很有趣.它在没有异常但在finally子句之前运行.这是一个没有合理替代方案的用例.

如果没有else子句,在完成之前运行其他代码的唯一选择就是将代码添加到try-clause中的笨拙做法.这是笨拙的,因为它有可能在代码中引发异常,而这些异常并不是由try-block保护的.

在最终确定之前运行其他未受保护的代码的用例不会经常出现.因此,不要期望在已发布的代码中看到许多示例.这有点罕见.

else子句的另一个用例是它执行必须在没有异常发生时发生的动作,并且在处理异常时不会发生.例如:

   recip = float('Inf')
   try:
       recip = 1 / f(x)
   except ZeroDivisionError:
       logging.info('Infinite result')
   else:
       logging.info('Finite result')
Run Code Online (Sandbox Code Playgroud)

最后,try-block中else子句的最常见用法是进行一些美化(在同一级别的缩进处调整异常结果和非异常结果).此用法始终是可选的,并非绝对必要.

它是否用在一些真实世界的代码中?

是的,标准库中有很多例子.

  • 在介绍唯一的示例时,您只需重复 `else:` 的作用(如果 `try` 中没有异常,则在 `finally` 之前运行其代码,正如您之前已经说过的,并且从文档中可知),但是如果“else:”部分位于“try:”内部,示例将起到相同的作用,因此它也不提供任何(有趣的)用例。 (2认同)