首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Isinstance()不工作

Isinstance()不工作
EN

Stack Overflow用户
提问于 2012-04-14 14:06:33
回答 4查看 8K关注 0票数 0

由于某种原因,我不能让isinstance()在Python 2.7.2上工作

代码语言:javascript
复制
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)

当我编译并运行它时:

代码语言:javascript
复制
>>> list = ["q", "w", ["D", ["E", "I"]]]
>>> print_lol(list)

我得到了错误消息:

代码语言:javascript
复制
if isinstance(item, list):
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

我错过了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-14 14:09:05

您已将变量命名为list

代码语言:javascript
复制
>>> list = ["q", "w", ["D", ["E", "I"]]]

它隐藏了内置的list

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

票数 8
EN

Stack Overflow用户

发布于 2012-04-14 14:09:19

这就是你有问题的地方

代码语言:javascript
复制
>>> list = ["q", "w", ["D", ["E", "I"]]]

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

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

在本例中,使用以下代码将非常方便

代码语言:javascript
复制
>>> mylist = [w for w in mylist if len(w) >= 3 and diff(w)]
>>> isinstance(mylist,list)
True

请注意,如果您污染了名称空间,并且正在空闲模式下运行,那么重新启动空闲模式是一个很好的选择。

票数 2
EN

Stack Overflow用户

发布于 2012-04-14 14:09:11

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

代码语言:javascript
复制
list = ["q", "w", ["D", ["E", "I"]]]

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10151444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档