如何在Python中“测试”NoneType?

677 投票
9 回答
1001815 浏览
提问于 2025-04-18 02:49

我有一个方法,有时候会返回一个空值(NoneType)。那么我该怎么判断一个变量是不是空值呢?我需要使用if语句,比如说:

if not new:
    new = '#'

我知道这样做是不对的,希望你能明白我的意思。

9 个回答

19

我不确定这是否能回答问题。不过我知道我花了很长时间才搞明白这一点。我在一个网站上循环抓取数据,突然发现作者的名字不见了。所以我需要加一个检查的语句。

if type(author) == type(None):
     print("my if body")
else:
     print(" my else body")

在这个例子中,作者可以是任何变量,而None可以是你要检查的任何类型。

36

正如Aaron Hall的评论所指出的:

因为你不能对NoneType进行子类化,并且None是一个单例,所以不应该用isinstance来检测None。相反,你应该按照被接受的答案所说,使用is Noneis not None


原始回答:

不过,最简单的方法是,不需要额外的行,除了cardamom的回答,可能是:
isinstance(x, type(None))

那么我该如何判断一个变量是NoneType呢?我需要使用if方法。

使用isinstance()不需要在if语句中使用is

if isinstance(x, type(None)): 
    #do stuff

附加信息
你还可以在一个isinstance()语句中检查多个类型,正如文档中提到的。只需将类型写成一个元组即可。

isinstance(x, (type(None), bytes))
72

这也可以通过 isinstance 来实现,正如 Alex Hall 的回答 所说的:

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance 这个方法也很直观,但有一个小麻烦,就是它需要这一行:

NoneType = type(None)

而对于像 intfloat 这样的类型,就不需要这一步。

137

这段内容是关于编程的问题,涉及到一些技术细节。虽然我不能直接回答问题,但我可以帮你理解这些内容。

在编程中,常常会遇到一些代码块,它们用来执行特定的功能或操作。比如说,

if variable is None:
   ...
if variable is not None:
   ...
就是这样的代码块占位符,表示这里应该有代码,但具体内容没有给出。

理解这些代码块的作用,可以帮助你更好地掌握编程的基本概念。记住,编程就像搭积木,每一块代码都是一个积木,组合在一起才能完成一个完整的项目。

999

那么,我该如何检查一个是 NoneType 的变量呢?

可以使用 is 操作符,像这样:

if variable is None:

为什么这样做有效呢?

因为在 Python 中,NoneNoneType 唯一的实例,所以我们可以用 is 操作符来检查一个变量是否是 None

根据 is 的文档

操作符 isis not 用来测试对象的身份:x is y 只有在 xy 是同一个对象时才为真。x is not y 则是相反的真值。

因为 None 只有一个实例,所以使用 is 来检查 None 是最合适的方式。


听听权威的说法

引用 Python 的编码风格指南 - PEP-008(由 Guido 本人共同定义),

与单例(像 None)的比较应该始终使用 isis not绝不要使用等于操作符

撰写回答