Isinstance()没有

2024-05-19 22:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

出于某种原因,我无法让isinstance()在Python2.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

我错了什么?


Tags: theinfalseforifdef错误item
3条回答

问题是,通过给名为list的变量赋值,您已经隐藏了内置的list

list = ["q", "w", ["D", ["E", "I"]]]

您应该尽量避免对变量使用任何内置名称,因为这通常会导致混淆错误。解决方案是为变量使用不同的名称。

这就是你的问题所在

>>> 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

请注意,如果您污染了命名空间,并且正在空闲状态下运行,则重新启动空闲状态是一个不错的选择。

您已将变量命名为list

>>> list = ["q", "w", ["D", ["E", "I"]]]

它隐藏了内置的list

重命名变量后,重新启动Python(或IDE)。因为您的list是一个全局变量,否则它将保持不变。

相关问题 更多 >