由于某种原因,我不能让isinstance()在Python 2.7.2上工作
def print_lol(the_list, indent=False, level=0):
for item in the_list:
if isinstance(item, list):
print_lol(item, indent, level+1)
else:
print(item)当我编译并运行它时:
>>> list = ["q", "w", ["D", ["E", "I"]]]
>>> print_lol(list)我得到了错误消息:
if isinstance(item, list):
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types我错过了什么?
发布于 2012-04-14 14:09:05
您已将变量命名为list
>>> list = ["q", "w", ["D", ["E", "I"]]]它隐藏了内置的list。
重命名变量后,重新启动Python (或IDE)。由于您的list是一个全局变量,否则它将保留不变。
发布于 2012-04-14 14:09:19
这就是你有问题的地方
>>> list = ["q", "w", ["D", ["E", "I"]]]覆盖list之类的python命名类型会将变量名与新的对象实例绑定在一起。所以后来当你用list尝试isinstance时,它失败了。
当您创建新变量时,请避免将其命名为与内置变量不同的名称,并且不要与命名空间冲突。
在本例中,使用以下代码将非常方便
>>> mylist = [w for w in mylist if len(w) >= 3 and diff(w)]
>>> isinstance(mylist,list)
True请注意,如果您污染了名称空间,并且正在空闲模式下运行,那么重新启动空闲模式是一个很好的选择。
发布于 2012-04-14 14:09:11
问题是,您通过将变量赋值给名为list的变量来隐藏内置的list
list = ["q", "w", ["D", ["E", "I"]]]您应该尽量避免对变量使用任何内置名称,因为这通常会导致令人困惑的错误。解决方案是为您的变量使用不同的名称。
https://stackoverflow.com/questions/10151444
复制相似问题