如何“测试”;python中的NoneType ?

我有一个方法,有时返回一个NoneType值。因此,我如何质疑一个变量是一个NoneType?例如,我需要使用如果< em > < / em >方法

if not new:
new = '#'

我知道这是错误的方式,我希望你能理解我的意思。

846205 次浏览

因此,我如何质疑一个变量是一个NoneType?

使用is操作符,如下所示

if variable is None:

为什么会这样?

由于在Python中NoneNoneType的唯一单例对象,我们可以使用is操作符来检查变量中是否有None

引用# EYZ0文档

运算符isis not测试对象的身份:当且仅当xy是同一个对象时,x is y为真。x is not y产生反真值。

因为None只能有一个实例,所以is是检查None的首选方法。


听可靠消息

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

#EYZ0应该总是用#EYZ1或is not完成不要用等号运算符等单例对象的比较。

if variable is None:
...

if variable is not None:
...

也可以按照Alex Hall的回答使用isinstance:

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

isinstance也是直观的,但它需要线条,这很复杂

# EYZ0

这对于intfloat这样的类型是不需要的。

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

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


< em >原始答:< / em >

然而,最简单的方法,除了小豆蔻的回答之外没有额外的行可能是:
# EYZ0 < / p >

因此,我如何质疑一个变量是一个NoneType?我需要使用if方法

使用isinstance()不需要在# eyz2语句中使用is:

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

< p > # EYZ0 < br > 您还可以在文档中提到的isinstance()语句中检查多个类型。只需将类型编写为元组。< / p >
isinstance(x, (type(None), bytes))

Python 2.7:

x = None
isinstance(x, type(None))

isinstance(None, type(None))

= = >真

不确定这是否回答了问题。但我知道我花了一段时间才想明白。我在循环浏览一个网站,突然作者的名字不在了。所以需要一个检查语句。

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

在这种情况下,Author可以是任何变量,None可以是您正在检查的任何类型。

我希望这个例子对你有帮助)

print(type(None))  # NoneType

你可以检查变量名的类型

# Example
name = 12  # name = None


if type(name) is type(None):
print("Can't find name")
else:
print(name)

我主要使用以下方法来检查NoneType。

if (new): # not None
...
else: # NoneType
...