定期返回函数的流控制无

时间:2014-01-02 12:08:49

标签: python

我有一个函数getPrices(),有时会返回None,大部分时间都会返回字典。

调用它时,我想在它返回None时传递,并在实际返回字典时执行某些操作。

这就是我的方法:

if getPrices() is None:
    pass
else:
    if getPrices().items():
        for key, value in getPrices().items():
            <do something>

现在,这显然是错误的,因为我偶尔会得到这个错误

if getPrices().items(): 
AttributeError: 'NoneType' object has no attribute 'items'

您如何正确处理返回getPrices()的{​​{1}}函数?

4 个答案:

答案 0 :(得分:7)

您的问题是,每次getPrices() returndict None时, if getPrices() is None: # first call pass else: if getPrices().items(): # second call for key, value in getPrices().items(): # third call

value = getPrices()
if value is not None:
    for key, value in value.items():
        # do your stuff

相反,您应该存储结果值以进行处理:

{{1}}

答案 1 :(得分:2)

由于您的getPrices函数并不总是返回相同的内容,因此多次调用它将返回不同的结果。考虑一下:

def getPrices():
   return random.random()

显然,有些代码如:

if getPrices() > 0.5:
    print getPrices()

有时会返回小于0.5的值。同样,你想做类似的事情:

prices = getPrices()
if prices is None:
   ...
else:
   ...

或者更好的是:

 prices = getPrices()
 if hasattr(prices, 'items'):
     items = prices.items()
     ...
 else:
     log.warning("Prices is not a dictionary !")
     ...

答案 2 :(得分:1)

或者只是抓住错误:

try:
    for key, value in getPrices().items():
        <do something>
except AttributeError:
    #log error
    #cleanup

答案 3 :(得分:0)

不是多次调用和调用函数,而是将它赋值给变量。

pricesDict = getPrices()
if pricesDict is not None:
    for key, value in prices.items():
        <do something>