什么是'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'>
从上面的后面的链接:
Nonetypes的唯一值
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。 你将不得不考虑这是为什么,这可能是你的一个简单的逻辑错误。