Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";测试“;python中的非类型?_Python_Nonetype - Fatal编程技术网

如何";测试“;python中的非类型?

如何";测试“;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方法

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")