如何在Python中避免forin在None上循环

2024-09-29 21:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我循环遍历一个函数的结果,没有先将结果存储在单独的变量中;大概是这样的:

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

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

a)保持代码干净和简单(不要将结果存储在var中,如果!=无,则执行此操作,等等)

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


Tags: 方法函数代码innone列表forif
2条回答

您有一个名为itter()的方法,它返回一个iterable对象。我想说的是,给定函数的名称,可以合理地说“返回值应该始终是iterable”。所以,如果你返回一个列表,如果你没有值,你应该返回一个空列表

要执行的代码。添加以下内容没有错:

if retval is None:
  return []
return retval

return retval or []

itter()实现的末尾,具体取决于使用的类型

考虑一下:你编写了代码,而你正面临这个问题。如果有人在不知道你知道什么的情况下试图使用你的代码呢。他们期待什么

或者,您应该使用Generators(如果合适)。它们包含一个“next”方法(参见链接中的文档),如果没有值,可以返回false

也许可以使用以下事实:[]None的计算结果都为False,但包含内容的列表不会:

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

相关问题 更多 >

    热门问题