【发布时间】:2022-07-04 18:27:49
【问题描述】:
我必须将项目从 Python 2.7 迁移到 3.7。
这行代码曾经在 2.7 中工作
if isinstance(obj, None):
由于某种原因它不再。如果我这样修改:
if isinstance(obj, type(None)):
它会起作用的。
但我的问题是,这个调用有什么区别:
isinstance(obj, None)
和
obj is None
为什么最初的开发者决定使用 isinstance over is? (在 py 2.7 中)
谢谢。
【问题讨论】:
-
在这两个版本中,检查
None的首选方法是obj is None。我无法告诉你为什么开发人员会进行如此复杂的比较。 -
我有点惊讶
if isinstance(obj, None):曾经工作过;None不是None的实例(None不是类,没有任何东西是它的实例)。 -
它在 Python 2.7.16 中肯定行不通。
-
文档中没有任何内容暗示
None被默默地提升为type(None)(类似于类型提示中允许的内容)。 -
@chepner:在那种情况下,我对 OP 看到它在哪里工作感到困惑。
标签: python