关于python:什么是’NoneType’对象?

What is a 'NoneType' object?

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

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

我很确定"str"是指字符串,但我不知道"nonetype"对象是什么。我的脚本停在第二行,我知道第一行有效,因为来自该行的命令如我所期望的那样在我的ASA中。起初我认为这可能是因为我在send_命令中使用变量和用户输入。

"caps"中的所有内容都是变量,"小写"中的所有内容都是来自"parser.add"选项的输入。

我用的是pexpect和optparse

1
2
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)


NoneTypeNone对象的类型,该对象表示没有值。None是"不返回任何内容"函数的返回值。它也是搜索某些内容的函数的一个常见的默认返回值,可能会或可能不会找到它;例如,当regex不匹配时,它由re.search返回;当dict中没有条目时,它由dict.get返回。不能将None添加到字符串或其他对象。

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

1
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

groupSNMPGROUPCMDV3PRIVCMD中的一个值为None


NoneType只是None单体的类型:

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

从上面的后一个链接:

None

The sole value of the type NoneType. None is frequently used to represent the absence of a value, as when default arguments are not passed to a function. Assignments to None are illegal and raise a SyntaxError.

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


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

none是python的"null",NoneType是它的类型。

此代码将引发相同类型的错误:

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

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

1
if obj is None:

1
if obj is not None:


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


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

您通常不需要关心NoneType,但在本例中,必须知道type(None) == NoneType


发生错误的原因如下:>>> None +"hello world"
Traceback (most recent call last):
File"", line 1, in
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
>>

在其他语言中,python的none对象大致相当于null、nil等。


none type是none的类型。

请参阅以下文档:https://docs.python.org/2/library/types.html types.nonetype


其中一个变量没有给定任何值,因此它是非类型的。你得研究一下为什么会这样,这可能是你的一个简单的逻辑错误。