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

if not new:
    new = '#'

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


当前回答

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

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


最初的回答:

然而,最简单的方法,除了小豆蔻的答案之外,没有额外的线条可能是: isinstance (x,类型(无))

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

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

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

额外的信息 您还可以像文档中提到的那样,在一个isinstance()语句中检查多个类型。只需将类型编写为元组。

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

其他回答

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

像这样使用is运算符

if variable is None:

为什么会这样?

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

引用is docs,

操作符is和is not测试对象同一性:当且仅当x和y是同一个对象时,x is y为真。X不是y会得到逆真值。

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


听可靠消息

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

与None这样的单例对象的比较总是应该使用is或is not,而不是相等操作符。

if variable is None:
   ...

if variable is not None:
   ...

Python 2.7:

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

or

isinstance(None, type(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
  ...