【发布时间】:2018-03-22 01:13:34
【问题描述】:
我知道what a try-else block is,但考虑以下两个函数:
# Without else
def number_of_foos1(x):
try:
number = x['foo_count']
except:
return 0
return number
# With else
def number_of_foos2(x):
try:
number = x['foo_count']
except:
return 0
else:
return number
x_with_foo = dict(foo_count=5)
x_without_foo = 3
与this try-else question 不同,我们不会在try 块中添加额外的行。在这两种情况下,try 块都是一行,并且不违反将错误处理“接近”到导致它的错误的原则。
区别在于我们在成功的try 块之后去哪里。
在第一个块中,代码在except 块之后继续,在第二个块中,代码在else 处继续。
它们显然给出了相同的输出:
In [138]: number_of_foos1(x_with_foo)
Out[139]: 5
In [140]: number_of_foos1(x_without_foo)
Out[140]: 0
In [141]: number_of_foos2(x_with_foo)
Out[141]: 5
In [142]: number_of_foos2(x_without_foo)
Out[142]: 0
是首选吗?就口译员而言,它们甚至有什么不同吗?在成功的try 之后继续时,您应该总是有一个else,还是可以像number_of_foos1 那样不缩进继续?
【问题讨论】:
-
在你的情况下,你是从 except 块返回的。所以是等价的。不回来怎么办?那是不等价的。
-
Python try-else的可能重复
-
我认为这个问题与提议的骗子略有不同。我将尝试解释如何,看看情况如何。 (也许并没有什么不同!)
-
@Jean-FrançoisFabre,是的,我认为这是关键的区别,不是吗?因为 except 块总是返回,所以不需要 else 块。
标签: python