如何";测试“;python中的非类型?
我有一个有时返回非类型值的方法。那么,我如何质疑一个非类型的变量呢?例如,我需要使用if方法如何";测试“;python中的非类型?,python,nonetype,Python,Nonetype,我有一个有时返回非类型值的方法。那么,我如何质疑一个非类型的变量呢?例如,我需要使用if方法 if not new: new = '#' 我知道这是错误的方式,我希望你明白我的意思 那么,我如何质疑一个非类型的变量呢 使用is操作符,如下所示 if variable is None: 为什么这样做? 由于是Python中唯一的单例对象,我们可以使用is操作符检查变量中是否有None 引用 运算符为且不为测试对象标识:x为y当且仅当x和y为同一对象时为真x不是y产生反真值 由于只能有一
if not new:
new = '#'
我知道这是错误的方式,我希望你明白我的意思
那么,我如何质疑一个非类型的变量呢
使用is
操作符,如下所示
if variable is None:
为什么这样做?
由于是Python中唯一的单例对象,我们可以使用is
操作符检查变量中是否有None
引用
运算符为
且不为
测试对象标识:x为y
当且仅当x
和y
为同一对象时为真x不是y
产生反真值
由于只能有一个None
,is
是检查None
的首选方法
从马嘴里听到 引用(由Guido自己共同定义) 应始终使用
is
或is not
来比较像无
这样的单例,永远不要使用相等运算符
也可以使用
isinstance
按照以下步骤进行:
isinstance
也是直观的,但它需要行
NoneType=类型(无)
正如Aaron Hall的评论所指出的那样,int
和float
等类型不需要它:
由于您不能将
NoneType
作为子类,并且None
是一个单例,因此不应使用isinstance
来检测None
——相反,您应该按照公认的答案执行,并使用is None
或is note
原始答案: 但是,最简单的方法是,如果没有额外的行,可能是:
isinstance(x,type(None))
那么,我如何质疑一个非类型的变量呢?我需要使用if方法
使用isinstance()
不需要if
-语句中的is
:
if isinstance(x, type(None)):
#do stuff
附加信息
您还可以在一个
isinstance()
语句中检查多个类型,如中所述。只需将类型编写为元组
isinstance(x, (type(None), bytes))
Python 2.7:
x = None
isinstance(x, type(None))
或
==>True不确定这是否回答了问题。但我知道我花了一段时间才弄明白。我在一个网站上浏览,突然作者的名字不见了。所以我需要一份核对表
if type(author) == type(None):
print("my if body")
else:
print(" my else body")
在这种情况下,Author可以是任何变量,
None
可以是您正在检查的任何类型。我希望这个示例对您有所帮助)
打印(类型(无))#非类型
所以,您可以检查变量名的类型
#示例
name=12#name=None
如果类型(名称)为类型(无):
打印(“找不到名称”)
其他:
印刷品(名称)
我认为这已经得到了回答,而且显然是在以前的某个地方如果None
是您的方法返回的唯一一个bool(returnValue)
等于False
,那么如果不是新的:
应该可以正常工作。这种情况有时发生在内置libs中-例如,返回None或truthy match对象。另请参阅我在python中关于null
和None
的回答。由于您不能对NoneType
进行子类化,而且None
是单例,isinstance
不应用于检测None
-相反,您应该按照公认的答案执行,并使用is None
或is not None
。存在边缘情况。例如,如果您正在构建一个用于验证的动态类型列表,而验证器正在使用isinstance
(它接受一个列表)。更正:tuple,而不是list,因为您不能对NoneType
进行子类化,而且None
是一个单例,isinstance
不应用于检测None
-相反,您应该按照公认的答案执行,并使用is None
或is not None
@AaronHall为什么不应使用isinstance
?我知道应该首选is
,但在某些情况下,isinstance表单感觉更自然(比如一次检查多个类型isinstance(x,(str,bool,int,type(None)))
)。这只是个人喜好还是我不知道的警告?@Conchyliculator你的建议的缺点:1。类型的全局查找
2。然后叫它3。然后查找None
的类型-当None
既是一个单例又是一个关键字时。另一个缺点是:4。这是非常不标准的,当人们看到你的代码时,会让人大吃一惊<代码>x为无是一个更优化的检查。我建议x是None或isinstance(x,(str,bool,int))
-但我也建议您在对没有太多共同点的类型进行类型检查时,多想想自己在做什么…因为您不能将NoneType
子类化,而且None
是一个单例,isinstance
不应用于检测None
-相反,你应该按照公认的答案所说的去做,并且使用is None
或is not None
。因为None
是一个单例,type
不应用于检测None
-相反,你应该按照公认的答案所说的去做,并且使用是None
或者不是None
。我的其他主体是什么@jtlz2对不起,我应该澄清一下。如果else语句执行,我的else主体就是您希望发生的任何代码。如果你想知道,这不是一个受保护的python措辞,那么有什么区别呢
isinstance(x, (type(None), bytes))
x = None
isinstance(x, type(None))
isinstance(None, type(None))
if type(author) == type(None):
print("my if body")
else:
print(" my else body")