什么是“ NoneType”对象?

当我运行 python 脚本时,我得到了这个错误:

TypeError: cannot concatenate 'str' and 'NoneType' objects

我非常肯定‘ str’表示字符串,但是我不知道‘ NoneType’对象是什么。我的脚本在第二行失败了,我知道第一行可以工作,因为来自该行的命令正如我所期望的那样在我的 Asa 中。起初我认为这可能是因为我在 send _ command 中使用了变量和用户输入。

“ CAPS”中的所有内容都是变量,“小写”中的所有内容都是来自“ parser.add _ option”选项的输入。

我使用 pExpt 和 optparse

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
448280 次浏览

这意味着您要尝试将字符串与 None连接起来。

没有一个是 Python 的“ null”,而 NoneType是它的类型。

这段代码会引发同样的错误:

>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects

NoneType 只是 None单例的类型:

>>> type(None)
<type 'NoneType'>

从上面的后一个链接可以看出:

None

类型 NoneType的唯一值。None经常用于表示缺少值,如在没有将默认参数传递给函数时。分配到 None是非法的,并且引发 SyntaxError

在您的示例中,您试图连接的项目之一似乎是 None,因此出现了错误。

在 Python 中,为了表示没有值,可以使用 Nonetypes.NoneType.None

NoneTypeNone对象的类型,该对象指示 没有价值None是“不返回任何内容”的函数的返回值。对于那些搜索某些内容并且可能会或可能不会找到它的函数来说,它也是一个常见的默认返回值; 例如,当正则表达式不匹配时,它由 re.search返回,或者当输入框中没有输入时,它由 dict.get返回。不能将 None添加到字符串或其他对象。

其中一个变量是 None,而不是字符串。可能您在某个函数中忘记了 return,或者可能用户没有提供命令行选项,而 optparse为该选项的值提供了 None。当您尝试将 None添加到字符串时,您会得到这个异常:

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

groupSNMPGROUPCMDV3PRIVCMD中的一个值为 None

你的错误是由于这样的事情发生的:
> > 无人 + “你好世界”
Traceback (most recent call last):
文件“ < stdin >”,第1行,在 < module > 中
TypeError: + : ‘ NoneType’和‘ str’不支持操作数类型
>>>

Python 的 没有对象大致相当于其他语言中的 无效没有等。

在错误消息中,Python 解释器不会告诉您不能通过显示两个对象的值(本例中为字符串和 None)来连接它们,而是通过显示您试图连接的对象的类型来告诉您这一点。每个字符串的类型为 str,而单个 None实例的类型为 NoneType

您通常不需要关注 NoneType,但是在这个示例中,有必要知道 type(None) == NoneType

为防御性编程起见,在使用前应检查对象是否为空。

if obj is None:

或者

if obj is not None:

其中一个变量没有给出任何值,因此它是 NoneType。你必须调查一下为什么会这样,这可能是你的一个简单的逻辑错误。

NoneTypeNone的类型。

See the Python 2 docs here: Https://docs.python.org/2/library/types.html#types

It's returned when you have for instance print as your last statement in a function instead of return:

def add(a, b):
print(a+ b)


x = add(5,5)
print(x)
print(type(x))


y = x + 545
print(y)

TypeError: + : ‘ NoneType’和‘ int’不支持操作数类型 < 类别‘ NoneType’>

def add(a, b):
return (a+ b)


x = add(5,5)
print(x)
print(type(x))


10
<class 'int'>
555

用巨蟒

  • NoneType 是 None对象的类型。
  • 这样的东西只有一个。 因此,“ a无对象”和“ the无对象”和 “无”是表达同一件事的三种等价的方式。
  • 既然所有的无神论者都是一样的,而且不仅仅是平等的, 在您的代码中,您应该更喜欢 x is None而不是 x == None
  • 在常规 Python 中,您将在许多地方获得 None 代码所指出的接受的答案。
  • 您还将在您自己的代码中获得 None 使用不以。结束的函数的函数结果 return myvalue之类的。

代表:

  • There is a type NoneType in some but not all versions of Python, 见下文。
  • 当您执行 print(type(None))时,您将获得 <type 'NoneType'>.
    这是由 NoneType__repr__方法产生的。
    看看 文件 还有 神奇功能 (或“ dunder 函数”的 double低于分数在他们的名字)一般。

在 Python 2.7中

在 Python 3.0到3.9中

  • NoneType 已经 被移除了 来自 module types, 大概是因为这种类型只有一个值。
  • 然而,它实际上是存在的,它只是没有内在的名称: 可以通过编写 type(None)来访问 NoneType。
  • 如果你想要 NoneType回来,只要定义 NoneType = type(None).

在 Python 3.10 + 中

如果对象的类型是 None,请确保在方法中返回。例如:

class Node:
# node definition

那么,

def some_funct():
# some code
node = Node(self, self.head)
self.head = node

如果您没有从 some_func()返回任何东西,返回类型将是 NoneType,因为它没有返回任何东西。

相反,如果返回节点本身(Node对象) ,它将返回 Node-object类型。

def some_func(self):
node = Node(self, self.head)
self.head = node
return node

NoneType is type of None. Basically, The NoneType occurs for multiple reasons,

  • 首先,当你有一个函数和一个条件在里面时(例如) ,如果没有满足这个条件,它将返回 Nothing。 例如:- def dummy(x, y): if x > y: return x res = dummy(10, 20) print(res) # Will give None as the condition doesn't meet.

为了解决这个问题,返回0的函数,即返回0,如果条件不满足,函数将以0结束,而不是 Nothing。

  • 其次,当您显式地将一个变量分配给一个内置方法时,该方法不返回任何值,但是没有返回任何值。 My _ list = [1,2,3] My _ list = my _ list. sort () print(my_list) #None sort() mutate the DS but returns nothing if you print it. 或者 没有 Re = lis.something () Print (re) # 返回属性错误 NonType 对象没有属性