TypeError:覆盖旧值时,'NoneType'对象不可迭代

时间:2017-04-04 12:46:26

标签: python try-catch nonetype

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

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在每次迭代时必须具有不同的值,但由于函数在某一点返回None,然后它想要覆盖它,它会因错误“TypeError”而崩溃 - 尽管有一个干净的解决方案,尽管使用某种尝试 - 抓住机制?

以下代码使程序运行,但感觉就像误用早期设计错误的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;

2 个答案:

答案 0 :(得分:0)

你的函数测试在这种情况下没有返回函数自动返回None,而在返回时你试图将返回的[0]放到x并返回[1]到y。返回的是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 :(得分:0)

目前尚不清楚你要对我做什么。

1)a和b是本地数组,因此它们永远不会包含多于1个元素。    这是为了吗?

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