问题:如何在Python中“测试” NoneType?
我有一个有时返回NoneType值的方法。那么我如何质疑一个无类型的变量呢?例如,我需要使用if方法
if not new:
new = '#'
我知道这是错误的方式,希望您能理解我的意思。
I have a method that sometimes returns a NoneType value. So how can I question a variable that is a NoneType? I need to use if method, for example
if not new:
new = '#'
I know that is the wrong way and I hope you understand what I meant.
回答 0
那么我如何质疑一个无类型的变量呢?
is
像这样使用运算符
if variable is None:
为什么这样有效?
由于None
是NoneType
Python中唯一的单例对象,因此我们可以使用is
operator来检查变量None
中是否包含变量。
引用is
文档,
运算符is
和is not
对象身份测试:x is y
当且仅当x
和y
是相同对象时,才为true 。x is not y
产生反真值。
由于只能有一个实例None
,is
因此是检查的首选方法None
。
从马口中听到
引用Python的编码样式指南-PEP-008(由Guido亲自定义),
与单例之类的比较None
应该总是用is
或is not
而不是等式运算符进行。
So how can I question a variable that is a NoneType?
Use is
operator, like this
if variable is None:
Why this works?
Since None
is the sole singleton object of NoneType
in Python, we can use is
operator to check if a variable has None
in it or not.
Quoting from is
docs,
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.
Since there can be only one instance of None
, is
would be the preferred way to check None
.
Hear it from the horse’s mouth
Quoting Python’s Coding Style Guidelines – PEP-008 (jointly defined by Guido himself),
Comparisons to singletons like None
should always be done with is
or is not
, never the equality operators.
回答 1
if variable is None:
...
if variable is not None:
...
if variable is None:
...
if variable is not None:
...
回答 2
也可以isinstance
按照Alex Hall的回答来完成:
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
也很直观,但有一个复杂之处,那就是需要
NoneType = type(None)
对于像int
和这样的类型,则不需要float
。
It can also be done with isinstance
as per Alex Hall’s answer :
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
is also intuitive but there is the complication that it requires the line
NoneType = type(None)
which isn’t needed for types like int
and float
.
回答 3
正如亚伦·霍尔的评论所指出的:
由于您不能继承子类,NoneType
并且由于None
是单例,isinstance
因此不应将其用于检测None
-而是应按照已接受的答案进行操作,并使用is None
或is not None
。
原始答案:
但是,最简单的方法,除了豆蔻果实的答案外,没有多余的内容可能是:
isinstance(x, type(None))
那么我如何质疑一个无类型的变量呢?我需要使用if方法
使用isinstance()
不需要is
的内if
语句来:
if isinstance(x, type(None)):
#do stuff
其他信息
您还可以isinstance()
按照文档中的说明在一个语句中检查多种类型。只需将类型写为元组即可。
isinstance(x, (type(None), bytes))
As pointed out by Aaron Hall’s comment:
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
.
Original Answer:
The simplest way however, without the extra line in addition to cardamom’s answer is probably:
isinstance(x, type(None))
So how can I question a variable that is a NoneType? I need to use if method
Using isinstance()
does not require an is
within the if
-statement:
if isinstance(x, type(None)):
#do stuff
Additional information
You can also check for multiple types in one isinstance()
statement as mentioned in the documentation. Just write the types as a tuple.
isinstance(x, (type(None), bytes))
回答 4
不知道这是否能回答问题。但是我知道这花了我一段时间才能弄清楚。我浏览了一个网站,突然间,作者的名字不再存在。因此需要一个检查语句。
if type(author) == type(None):
my if body
else:
my else body
在这种情况下,作者可以是任何变量,也None
可以是您要检查的任何类型。
Not sure if this answers the question. But I know this took me a while to figure out. I was looping through a website and all of sudden the name of the authors weren’t there anymore. So needed a check statement.
if type(author) == type(None):
my if body
else:
my else body
Author can be any variable in this case, and None
can be any type that you are checking for.
回答 5
Python 2.7:
x = None
isinstance(x, type(None))
要么
isinstance(None, type(None))
==>正确
Python 2.7 :
x = None
isinstance(x, type(None))
or
isinstance(None, type(None))
==> True
回答 6
希望这个例子对您有帮助)
print(type(None) # NoneType
因此,您可以检查变量名称的类型
#Example
name = 12 # name = None
if type(name) != type(None):
print(name)
else:
print("Can't find name")
I hope this example will be helpful for you)
print(type(None) # NoneType
So, you can check type of the variable name
#Example
name = 12 # name = None
if type(name) != type(None):
print(name)
else:
print("Can't find name")