0

出于某种原因,我无法让 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

我错过了什么?

4

4 回答 4

8

您已将变量命名为list

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

这隐藏了内置的list.

重命名变量后,重新启动 Python(或 IDE)。由于 yourlist是一个全局变量,否则它将一直存在。

于 2012-04-14T06:09:04.530 回答
2

这是你有问题的地方

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

覆盖 python 命名类型,例如list将变量名称与新的对象实例绑定。所以后来当你用 list 尝试 isinstance 时,它​​失败了。

当您创建新变量时,请避免将其命名为与内置变量不同的名称,并且不要与命名空间冲突。

在此示例中,使用以下内容将轻而易举

>>> mylist = [w for w in mylist if len(w) >= 3 and diff(w)]
>>> isinstance(mylist,list)
True

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

于 2012-04-14T06:09:18.847 回答
1

list问题是您通过分配一个名为的变量来隐藏内置list

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

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

于 2012-04-14T06:09:10.727 回答
1

您正在覆盖list,请先尝试print list诊断isinstance此类问题。

于 2012-04-14T06:10:07.307 回答