返回不同数量的实体

时间:2016-04-14 15:35:46

标签: python python-2.7

我有下一个功能:

def foo():
    try:
        a = bar1()
        b = bar2()
    except Exception as e:
        logging.exception(e)
        return
    return a, b

如您所见,可能会返回不同数量的值。 根据这一点,我应该仔细检查它:

if foo():
    x, y = foo()

但似乎有一些开销。 这种做法好吗?任何替代方案?

我应该为除块外的两个变量返回None以防止双重执行吗?

2 个答案:

答案 0 :(得分:2)

这超出了Exception的目的。请尝试遵循以下准则:

  1. 如果有异常,除非您知道究竟如何处理, 不要抓住它
  2. 您可以将Exception子类化为特定于方案的例外
  3. 永远不要使用像你拥有的那样的全能模块
  4. 保持方法的返回值一致
  5. 考虑一下:

    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