避免在Python中循环遍历None值

时间:2014-05-09 09:48:19

标签: python

我多次遇到这个问题,我知道我可以添加一些if块来避免这个问题,但我正在寻找一种最佳实践或好/好的方法来处理这种编程问题。

当我遍历函数的结果而不将结果拳头存储在单独的变量中时,如下所示:

for item in mycustimitemgetter.itter():
   dosomething()

并且函数返回None而不是空列表[],Python抛出异常。这是正确的python行为,没有任何问题。但我正在寻找最佳实践解决方案:

a)保持代码干净简单(不将结果存储在var中,并执行!= None等等。)

b)将None返回值视为空列表,即不运行循环并静默忽略函数返回None值的事实。

2 个答案:

答案 0 :(得分:9)

或许,请使用[]None评估为False的事实,但列出包含内容的列表:

for item in (mycustimitemgetter.itter() or []):
   dosomething()

答案 1 :(得分:5)

您有一个名为itter()的方法,它返回一个可迭代对象。我会说,给定函数的名称,说“#34;返回的值应始终是可迭代的"”是合理的。因此,如果您要返回一个列表,如果没有值,则应返回一个空列表。

要执行的代码。添加:

没有错
if retval is None:
  return []
return retval

return retval or []

itter()实施的结尾,具体取决于使用的类型。

请考虑一下:您编写了代码并且您正面临这个问题。那些在不知道你知道的情况下试图使用你的代码的人呢。他们期待什么?

或者你应该使用Generators(如果合适的话)。它们包含一个' next'方法(请参阅链接中的文档),如果没有值,则可以返回false。