如何在Python中”测试”None类型?

How to “test” NoneType in python?

我有一个方法,它有时返回一个非类型的值。那么我怎样才能质疑一个非类型的变量呢?例如,我需要使用if方法

1
2
if not new:
    new = '#'

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


So how can I question a variable that is a NoneType?

使用is运算符,如下所示

1
if variable is None:

为什么会这样?

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

引用is号文件,

The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value.

由于只有一个None实例,因此is是检查None的首选方法。

从马嘴里听到

引用了python的编码风格指南-pep-008(由guido自己共同定义)。

Comparisons to singletons like None should always be done with is or is not, never the equality operators.


1
2
if variable is None:
   ...
1
2
if variable is not None:
   ...


根据亚历克斯·霍尔的回答,也可以用isinstance来完成:

1
2
3
4
5
6
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance也是直观的,但其复杂之处在于,它需要一条线。

NoneType = type(None)

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


正如亚伦希尔的命令所指出的:

Since you can't subclass NoneType and since None is a singleton, isinstance should not be used to detect None - instead you should do as the accepted answer says, and use is None or is not None.

原始答案:

然而,最简单的方法是,除了豆蔻的答案之外,如果没有额外的行,可能是:isinstance(x, type(None))

So how can I question a variable that is a NoneType? I need to use if method

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

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

附加信息您还可以在一个isinstance()语句中检查多个类型,如文档中所述。只需将类型编写为元组即可。

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


Python 2.7:

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

1
isinstance(None, type(None))

=真


希望这个例子对您有所帮助)

1
print(type(None) # NoneType

所以,您可以检查变量名的类型

1
2
3
4
5
6
#Example
name = 12 # name = None
if type(name) != type(None):
    print(name)
else:
    print("Can't find name")


不确定这是否回答了问题。但我知道我花了一段时间才弄明白。我在浏览一个网站,突然作者的名字不在了。所以需要一个支票声明。

1
2
3
4
if type(author) == type(None):
     my if body
else:
    my else body

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