我有下一个功能:
def foo():
try:
a = bar1()
b = bar2()
except Exception as e:
logging.exception(e)
return
return a, b
如您所见,可能会返回不同数量的值。 根据这一点,我应该仔细检查它:
if foo():
x, y = foo()
但似乎有一些开销。 这种做法好吗?任何替代方案?
我应该为除块外的两个变量返回None
以防止双重执行吗?
答案 0 :(得分:2)
这超出了Exception
的目的。请尝试遵循以下准则:
Exception
子类化为特定于方案的例外考虑一下:
class SpecificException(Exception):
pass
def foo():
a = bar1()
b = bar2()
return a, b
try:
a, b = foo()
except SpecificException as e:
logging.exception(e)
handle(e)
答案 1 :(得分:0)
我认为最好的解决方案是不捕获Exception
本身,并从调用函数处理异常。但是,并不总是需要这样做。所以,如果引发None
,我会从except块返回Exception
。
如果您仍然希望不会发生这种情况,(即解决您的开销问题),我建议您只从pass
块中except
,并让函数返回None,None
。