什么是'NoneType'对象?
我在运行我的python脚本时遇到这个错误:
TypeError: cannot concatenate 'str' and 'NoneType' objects
我很确定'str'是string,但是我不知道'NoneType'对象是什么。 我的脚本出现在第二行,我知道第一个工作,因为该行的命令是我所期望的。 起初我以为这可能是因为我在send_command中使用variables和用户input。
“CAPS”中的所有内容都是variables,“小写”中的所有内容都是从“parser.add_option”选项input的。
我正在使用pexpect,并optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD) send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
NoneType
是None
对象的types,它是指示没有值的对象。 None
是“不返回任何东西”的函数的返回值。 对于search某些内容的函数来说,这也是一个常见的默认返回值,可能会或可能找不到; 例如regex在regex不匹配时返回,或者dict.get
在dict中没有input。 您不能将“ None
添加到string或其他对象。
其中一个variables是None
,而不是string。 也许你忘了return
你的一个函数,或者用户没有提供一个命令行选项, optparse
给了你这个选项的值为None
。 当您尝试将None
添加到string时,会出现该exception:
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
group
或SNMPGROUPCMD
或V3PRIVCMD
具有None
作为其值。
NoneType
只是None
单一types:
>>> type(None) <type 'NoneType'>
从上面的后面的链接:
None
types的唯一值
NoneType
。None
经常用来表示没有值,因为当默认参数不传递给一个函数。 分配给None
是非法的,并引发一个SyntaxError
。
在你的情况下,它看起来像你试图连接的项目之一是None
,因此你的错误。
这意味着你正试图连接一个string与None
东西。
None是Python的“null”, NoneType
是它的types。
这段代码会引发同样的错误:
>>> bar = "something" >>> foo = None >>> print foo + bar TypeError: cannot concatenate 'str' and 'NoneType' objects
为了防御性编程,在使用之前应该检查对象是否为空。
if obj is None:
要么
if obj is not None:
在错误消息中,Python解释器通过显示您尝试连接的对象的types来告诉您这一点,而不是告诉您不能通过显示它们的值来连接两个对象(在本例中为string和None
)。 每个string的types都是str
而单个None
实例的types被称为NoneType
。
您通常不需要关心NoneType
,但在此示例中,需要知道该type(None) == NoneType
。
在Python中,为了表示没有值,可以使用None
值types.NoneType.None
None
你的错误是由于这样的事情发生的:
>>> None + "hello world"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'>>> None + "hello world"
>>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Python的None对象大致相当于其他语言中的null , nil等。
其中一个variables没有赋予任何价值,因此它是一个NoneType。 你将不得不考虑这是为什么,这可能是你的一个简单的逻辑错误。