出于某种原因,我无法使用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
我在想什么?
答案 0 :(得分:8)
您已将变量命名为list
:
>>> list = ["q", "w", ["D", ["E", "I"]]]
隐藏了内置list
。
重命名变量后,重新启动Python(或IDE)。由于您的list
是一个全局变量,否则它将保持不变。
答案 1 :(得分:2)
这是您遇到问题的地方
>>> list = ["q", "w", ["D", ["E", "I"]]]
覆盖python命名类型,如list
,将变量名称与新对象实例绑定。所以后来当你尝试使用list实例时,它失败了。
当您创建新变量时,请不要以与内置命名不同的方式命名它,也不要与命名空间冲突。
在此示例中,使用以下内容将像微风一样工作
>>> mylist = [w for w in mylist if len(w) >= 3 and diff(w)]
>>> isinstance(mylist,list)
True
请注意,如果您已经污染了命名空间并且您正在IDLE中运行,那么重新启动IDLE是一个不错的选择。
答案 2 :(得分:1)
问题是您通过分配名为list
的变量隐藏了内置list
:
list = ["q", "w", ["D", ["E", "I"]]]
您应该尽量避免对变量使用任何内置名称,因为这通常会导致混淆错误。解决方案是为变量使用不同的名称。
答案 3 :(得分:1)
您正在覆盖list
,请在print list
之前尝试isinstance
来诊断此类问题。