Python 为什么我会有这个打字错误?
已解决:好吧,你们可能不会相信这一点。我做了很多挖掘工作,结果发现我们正在加载和使用的所有文件都是错误创建的。这些文件与我们正在编写的代码不一致——根据我们加载的文件的当前状态,我们想在程序中做的事情根本不可能。我目前正在解决这个问题。对不起,没问题了,伙计们Python 为什么我会有这个打字错误?,python,list,iteration,typeerror,Python,List,Iteration,Typeerror,已解决:好吧,你们可能不会相信这一点。我做了很多挖掘工作,结果发现我们正在加载和使用的所有文件都是错误创建的。这些文件与我们正在编写的代码不一致——根据我们加载的文件的当前状态,我们想在程序中做的事情根本不可能。我目前正在解决这个问题。对不起,没问题了,伙计们 在Python中,我的代码基本上如下所示: partsList = getPartsList() # this function returns a list for part in partsList: ... bar(par
在Python中,我的代码基本上如下所示:
partsList = getPartsList() # this function returns a list
for part in partsList:
...
bar(partsList)
def bar(partsList):
for part in partsList:
...
但是当我运行代码时,我得到以下类型的错误:
TypeError: iteration over non-sequence
此TypeError
与注释行有关:
def bar(partsList):
for part in partsList: # this is the line with the TypeError
...
这怎么可能?我知道partsList
不是一个非序列,因为就在我的程序调用bar(partsList)
之前,我显式地迭代了partsList
我的函数在与之交互之前不会修改partsList
,在调用函数之前迭代时也不会修改partsList
,但在调用函数时它会从列表变为非序列
我完全在一个类中工作,所以实际上这些都是方法;我只是想,如果我以这种方式呈现代码,会更容易阅读
以下是对评论的回应:
def someMethod(self):
...
partsList = self.getPartsList() # this function returns a list
for part in partsList:
...
print partsList # prints [object(1), object(2)]
self.bar(partsList)
def bar(self, partsList):
print partsList # prints <filename.class instance at 0x04886148>
for part in partsList: # still gives me the TypeError
...
我希望能为大家提供完整的代码,但目前该程序需要275个文件才能运行,并且有20个+.py
文件。我要提到的是,所讨论的方法确实在通过给定列表进行迭代后使用递归。我认为这可能与错误有关,但当试图打印列表本身及其内容时,程序在通过该方法之前给出了相同的TypeError
,因此我知道这不是由于递归;它甚至从未再出现过
好的,我插入了如下打印语句(请记住这些语句在类的方法中):
def someMethod(self):
...
partsList = self.getPartsList() # this function returns a list
for part in partsList:
...
print partsList # prints [object(1), object(2)]
self.bar(partsList)
def bar(self, partsList):
print partsList # prints <filename.class instance at 0x04886148>
for part in partsList: # still gives me the TypeError
...
def someMethod(self):
...
partsList=self.getPartsList()#此函数返回一个列表
对于零件列表中的零件:
...
打印零件列表#打印[对象(1)和对象(2)]
自选条(零件列表)
def栏(自身、零件列表):
打印零件列表#打印件
对于part-in-partsList:#仍然给我输入错误
...
当我说filename.class
时,我的字面意思不是filename
和class
。你们知道我的意思
第二个打印语句是否打印
,因为它指向实际的零件列表
?我不完全确定指针和引用在Python中是如何工作的。您没有正确定义bar
;它的第一个参数是对调用它的对象的引用,第二个参数是作为显式参数传递的列表
def bar(self, partsList):
for part in partsList:
...
你的答案在印刷品上
def bar(self, partsList):
print partsList # prints <filename.class instance at 0x04886148>
for part in partsList: # still gives me the TypeError
...
以交互方式运行此命令可获得以下信息:
从fake_尝试导入myClass
x=myClass()
x、 someMethod()
A.
B
C
['a','b','c']
A.
B
c
您会注意到,当我调用“print pList”时,我收到了列表的一个漂亮的打印输出。您正在接收类类型的对象
我理解并同情你的处境。有一个大的,复杂的程序抛出错误可能是相当痛苦的调试。不幸的是,在没有看到您的全部代码的情况下,我认为这里的任何人都无法调试您的问题,因为我猜您调用“someMethod”的方式在实际代码中是意外的(或在意外的地方),这会导致您出现问题
有几种方法可以调试它
请给我们看一个重现错误的样品。我猜你在
for
循环中有partsList
,但是如果没有更多的信息,我们只能猜测。你能打印partsList
的内容并向我们显示输出吗?你能提供完整的回溯和复制问题的可运行代码吗?“我完全在一个类中工作…”我们需要完整的代码,因为上面的代码并不代表会发生什么。我们并不是要求所有的代码。我们要求的是可复制的最小样品。您还可以使用print()
语句查看此处的确切内容(在函数中使用print(repr(partsList))
并告诉我们这是什么内容)。但就目前而言,你的问题无法回答。对不起,我打错了示例。我现在编辑了我的文章以反映实际的代码。您的示例在调用self.bar
时仍然不一致地使用了本地(且未定义的)partsList
,而不是self.partsList
,因此仍然不清楚是什么