我多次遇到这个问题,我知道我可以添加一些if
块来避免这个问题,但我正在寻找一种最佳实践或好/好的方法来处理这种编程问题。
当我遍历函数的结果而不将结果拳头存储在单独的变量中时,如下所示:
for item in mycustimitemgetter.itter():
dosomething()
并且函数返回None
而不是空列表[]
,Python抛出异常。这是正确的python行为,没有任何问题。但我正在寻找最佳实践解决方案:
a)保持代码干净简单(不将结果存储在var中,并执行!= None等等。)
b)将None
返回值视为空列表,即不运行循环并静默忽略函数返回None
值的事实。
答案 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。