我正在尝试学习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条款适用于什么?它是否用在一些真实世界的代码中?
通常,将代码放在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子句的最常见用法是进行一些美化(在同一级别的缩进处调整异常结果和非异常结果).此用法始终是可选的,并非绝对必要.
它是否用在一些真实世界的代码中?
是的,标准库中有很多例子.