【发布时间】:2020-08-07 18:01:28
【问题描述】:
我正在学习如何在 python(3.6 版)中编写游戏代码,但我遇到了一个让我迷路的错误。我试图运行我的代码和这个追溯到 sprite.py(我从 python 库导入的文件)的错误消息。这是弹出的错误信息:
文件“C:\Users\aveil\AppData\Roaming\Python\Python36\site-packages\pygame\sprite.py”,第 142 行, 在 add self.add(*group) TypeError: add() argument after * must be an iterable, not int >>>
这是回溯导致的代码:
has = self.__g.__contains__
for group in groups:
if hasattr(group, '_spritegroup'):
if not has(group):
group.add_internal(self)
self.add_internal(group)
else:
self.add(*group)
我没有粘贴整个 sprite.py 文件,因为它有 1.6k 行,但我希望这是足够的上下文。我没有写 sprite.py,而且对编码还是比较陌生,所以这个错误让我很难过。我不确定“int”在哪里或如何将它从整数更改为“可迭代”。 如有任何建议,我将不胜感激!
【问题讨论】:
-
如果您发布您自己编写的代码,而不是您未编写的代码,这可能会更有帮助。
-
错误是
group是一个整数,而*group用于将序列解压缩为方法调用的位置参数。我们不知道您的数据或self.add是什么,因此很难提出解决方案。你是对的,发布大量代码是不可行的。但了解self.add接受哪些参数会有所帮助。如果传递单个整数是合理的,那么self.add(group)可能是正确的。但这是一个复杂的代码,试图用不同的输入做不同的事情,很难猜出作者的意图。 -
您在
groups上显示了一个循环,代码似乎期望它包含具有_spritegroup属性的对象或可迭代对象。你以某种方式给它一个整数值。显示完整的回溯,包括您将groups传递给此代码的代码,以及您的设置方式。 -
我的 2 美分:想想
foo(*[1,2,3])相当于foo(1,2,3)。这就是*在这种情况下所做的事情。您显示的代码导致类似self.add(*1),好吧,1不能像列表那样扩展,所以你得到了这个错误。可迭代只是可迭代对象的一个花哨名称for x in <iterable here>是迭代的典型示例。 IHIH -
我们不需要对
add方法进行故障排除,错误消息清楚地说明了调用它时出了什么问题。问题是,为什么你的代码在期望其他东西时给这个库代码一个整数。显示调用此代码的您的代码!