我看到很多关于如何在函数中返回多个值的好建议,但是还有什么方法可以处理检查其他返回值如False?
例如:
def f():
if condition1:
return False
else:
return x, y, z
x, y, z = f()
我可以验证if [x, y, z] is not None:
但是如何检查False
?它只是if [x, y, z] is not None and f() is not False:
还是有优越的方式?
答案 0 :(得分:9)
我认为这有助于提高一致性:
def f():
if condition1:
return False, None
else:
return True, (x, y, z)
success, tup = f()
if success:
x, y, z = tup
# use x, y, z...
答案 1 :(得分:5)
如果你处于一个不幸的情况,你必须处理一个行为与你所呈现的函数类似的函数,一个明确的处理方法是使用<div class="container">
<!-- Start Masthead TopBar -->
<div class="masthead_topbar">
Test
<!-- End Masthead_TopBar -->
</div>
<!-- End Container DIV -->
</div>
语句。
try:
这样做有效,因为尝试解包try:
x, y, z = f()
except TypeError:
<handle the situation where False was returned>
会引发False
。
如果您可以修改该功能,我可能会认为惯用策略是引发错误(内置或自定义)而不是返回TypeError
。
False
这有利于在未捕获的回溯中显示错误的真实性质,而不是不那么明显的def f():
if condition1:
raise ValueError('Calling f() is invalid because condition1 evaluates to True')
return x, y, z
try:
x, y, z = f()
except ValueError:
<handle the situation where a tuple could not be returned>
。它还具有提供一致返回类型的好处,因此用户不会产生混淆。
文档也变得更加清晰,因为而不是
TypeError: 'bool' object is not iterable
文档变为
"in the case of success it will return a tuple of three elements, but in the case of failure it will return False (not as a tuple)"
答案 2 :(得分:2)
将结果分配给单个变量并检查它是否为假:
retval = f()
if retval != False:
x,y,z = retval
else: # False
...