TypeError: 'NoneType' object is not iterable when overwriting old value

TypeError: 'NoneType' object is not iterable when overwriting old value

这是对我的程序的简化,我很难理解错误发生的原因以及解决方法。

def test(n=0):


 a = [];
 b = [];

 if n == 0:
  return a,b
 else:
  a.append(1);
  b.append(2);


for i in range(0,2):
 x,y = test(i)

x 和 y 在每次迭代中必须具有不同的值,但是由于函数 returns None 在某一时刻后来想要覆盖它,它会因错误 [= =18=] - 尽管使用某种 try - catch 机制,是否有一个干净的解决方案?

下面的代码使程序运行,但感觉像是误用了早期设计错误的try-catch机制。

def test(n=0):


 a = [];
 b = [];

 if n == 0:
  return a,b
 else:
  a.append(1);
  b.append(2);


for i in range(0,2):
 try:
  x,y = test(i)
 except TypeError:
  continue;

在这种情况下,您的功能测试没有 return 功能自动 return None,而在 return 上您正试图将 returned [0] 到 x 和 returned[1] 到 y。 returned 是不可迭代的 None。

正确代码:

def test(n=0):


 a = [];
 b = [];

 if n == 0:
  return a,b
 else:
  a.append(1);
  b.append(2);

return a,b

for i in range(0,2):
 x,y = test(i)

不清楚你想对我做什么。

1) a 和 b 是本地数组,因此它们永远不会包含超过 1 个元素。 这是故意的吗?

2) 然后你的 func 测试在 else 部分没有 return 所以它会 return None。 您尝试通过迭代 None 将 None 放入 x 和 y 中,这是无法完成的,并且 给出错误