python - 对于具有相同 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我会说。这里发生了什么?
解决方案
啊哈!我认为这是因为他们有:
from builtins import str
显然这是为了获得类似 Python 3 的字符串。不过……真是乱七八糟。
>>> from builtins import str
>>> isinstance("foo", str)
False
如果你拒绝迁移到 Python 3,我想这就是你得到的。
推荐阅读
- javascript - 从日期字符串计算全年
- c# - .NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?
- r - 加入 3 个数据帧,其中可能存在重复条目
- flutter - 使用 ListView.builder 颤振
- javascript - 上传文件时来自反应 s3 的 SignatureDoesNotMatch 错误
- javascript - 使用 Django 框架在 JavaScript 中调用 .php 文档
- c# - 反/协方差和嵌套泛型
- firebase - Firebase 关系删除
- java - 如何使用查询字符串/参数在 HTTP GET 方法中检索数据?
- c# - 滚动到 WPF MVVM 上 ItemControls 上的特定项目