首页 > 解决方案 > 对于具有相同 ID 的类型,Python isinstance 返回 false

问题描述

在 cpuset 中的这段代码有一个奇怪的问题。由于某种原因isinstance('/user', str)正在回归False。我添加了一些这样的日志记录:

    log.debug("repr(name): %s", repr(name))
    log.debug("type(name): %s", type(name))
    log.debug("name.__class__: %s", name.__class__)
    log.debug("id(name.__class__): %s", str(id(name.__class__)))
    log.debug("id(''.__class__): %s", str(id("".__class__)))
    log.debug("isinstance(name, str)?: %s", str(isinstance(name, str)))

这是结果。

180820-14:28:55 set    DEBUG    repr(name): '/user'
180820-14:28:55 set    DEBUG    type(name): <type 'str'>
180820-14:28:55 set    DEBUG    name.__class__: <type 'str'>
180820-14:28:55 set    DEBUG    id(name.__class__): 94668708986528
180820-14:28:55 set    DEBUG    id(''.__class__): 94668708986528
180820-14:28:55 set    DEBUG    isinstance(name, str)?: False

很WTF我会说。这里发生了什么?

标签: pythonpython-2.xisinstance

解决方案


啊哈!我认为这是因为他们有:

from builtins import str

显然这是为了获得类似 Python 3 的字符串。不过……真是乱七八糟。

>>> from builtins import str
>>> isinstance("foo", str)
False

如果你拒绝迁移到 Python 3,我想这就是你得到的。


推荐阅读