对于具有相同ID的类型,Python isinstance返回false

对于具有相同ID的类型,Python isinstance返回false,python,python-2.x,isinstance,Python,Python 2.x,Isinstance,我和你有一个奇怪的问题。由于某些原因,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(i

我和你有一个奇怪的问题。由于某些原因,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。这是怎么回事?

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

from builtins import str
这是为了得到一个类似Python 3的字符串。但是真是一团糟

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

如果您拒绝使用Python 3,我想这就是您得到的结果。

请添加您的Python版本name='/user'的结果是什么?str被重新分配了吗?isinstance,str给了你什么?我唯一能想到的是str本身已经被其他类重写了。试着打印str,看看它到底是什么。python-future又来了!newstr是一个狡猾的小类,在Python3语义中,它不是str,而是bytes对象,所以我想它是正确的。事实上,这似乎是一个糟糕的问题绷带-坚持其中一种语言。