首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有Python错误/bug?

没有Python错误/bug?
EN

Stack Overflow用户
提问于 2013-06-20 02:18:38
回答 3查看 12.9K关注 0票数 20

在Python中有None单例,它在某些情况下表现得相当奇怪:

代码语言:javascript
复制
>>> a = None
>>> type(a)
<type 'NoneType'>
>>> isinstance(a,None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

首先,<type 'NoneType'>显示None不是一种类型,但NoneType是一种类型。然而,当您运行isinstance(a,NoneType)时,它会响应一个错误:NameError: name 'NoneType' is not defined

现在,考虑到这一点,如果您有一个函数的输入默认值设置为None,并且需要进行检查,您将执行以下操作:

代码语言:javascript
复制
if variable is None:
    #do something
else:
    #do something

我不能执行以下操作的原因是什么:

代码语言:javascript
复制
if isinstance(variable,None): #or NoneType
    #do something
else:
    #do something

我只是在寻找一个详细的解释,这样我就可以更好地理解这个

编辑:优秀的应用程序

假设我想使用isinstance,这样如果variable是包括None在内的多种类型,我就可以执行某些操作

代码语言:javascript
复制
if isinstance(variable,(None,str,float)):
    #do something
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-20 02:20:45

您可以尝试:

代码语言:javascript
复制
>>> variable = None
>>> isinstance(variable,type(None))
True
>>> variable = True
>>> isinstance(variable,type(None))
False

isinstance在这里接受两个参数isinstance(object, classinfo),通过传递None,你将classinfo设置为None,因此出现错误。你需要在类型中传递。

票数 32
EN

Stack Overflow用户

发布于 2013-06-20 02:20:03

None只是types.NoneType的一个值,它不是一个类型。

错误很明显:

TypeError: isinstance() arg 2必须是类型类型的元组

docs

Nonetypes.NoneType的唯一valueNone通常用于表示缺少值,例如当默认参数未传递给函数时。

您可以使用types.NoneType

代码语言:javascript
复制
>>> from types import NoneType
>>> isinstance(None, NoneType)
True

is运算符也工作得很好:

代码语言:javascript
复制
>>> a = None
>>> a is None
True
票数 4
EN

Stack Overflow用户

发布于 2013-06-20 02:23:37

None是一个值(实例),而不是类型。如错误消息所示,isinstance期望第二个参数是一个类型。

None的类型为type(None),如果导入(from types import NoneType),则类型为Nonetype

注意:进行测试的惯用方法是variable is None。简短且具有描述性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17198466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档