什么是'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。 你将不得不考虑这是为什么,这可能是你的一个简单的逻辑错误。