运行python脚本时出现此错误:
TypeError: cannot concatenate 'str' and 'NoneType' objects
我很确定'str'意味着字符串,但我不知道'NoneType'对象是什么。我的脚本在第二行开始了,我知道第一行是有效的,因为来自该行的命令在我的asa中,正如我所期望的那样。起初我以为可能是因为我在send_command中使用变量和用户输入。
'CAPS'中的所有内容都是变量,'小写'中的所有内容都是从'parser.add_option'选项输入的。
我正在使用pexpect和optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
答案 0 :(得分:57)
NoneType
是None
对象的类型,它是指示无值的对象。 None
是“不返回任何内容”的函数的返回值。它也是搜索某些东西的功能的常见默认返回值,可能会或可能找不到它;例如,当正则表达式不匹配时它由re.search
返回,或者当密钥在dict中没有条目时由dict.get
返回。您无法将None
添加到字符串或其他对象。
您的一个变量是None
,而不是字符串。也许您在某个函数中忘记了return
,或者用户没有提供命令行选项,而optparse
为您提供None
该选项的值。当您尝试将None
添加到字符串时,会出现该异常:
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
其中一个group
或SNMPGROUPCMD
或V3PRIVCMD
的值为None
。
答案 1 :(得分:18)
>>> type(None)
<type 'NoneType'>
从上面的链接开始:
<强>
None
强>
NoneType
类型的唯一值。None
经常用于表示缺少值,因为默认参数未传递给函数。分配给None
是非法的,并提出SyntaxError
。
在您的情况下,看起来您尝试连接的项目之一是None
,因此您的错误。
答案 2 :(得分:15)
这意味着您正在尝试将字符串与None
。
没有Python的“null”,NoneType
是它的类型。
此代码会引发同样的错误:
>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects
答案 3 :(得分:8)
为了防御性编程,在使用之前应该检查对象是否为无效。
if obj is None:
或
if obj is not None:
答案 4 :(得分:3)
在Python中,为了表示缺少值,您可以使用None
值types.NoneType.None
答案 5 :(得分:2)
在错误消息中,Python解释器不是通过显示它们的值(在此示例中为字符串和None
)而不是告诉您不能连接两个对象,而是通过显示类型来告诉您您尝试连接的对象。每个字符串的类型为str
,而单个None
实例的类型称为NoneType
。
您通常不需要关注NoneType
,但在此示例中,有必要了解type(None) == NoneType
。
答案 6 :(得分:1)
你的错误是由于这样的事情发生的:
>>> None + "hello world"
&GT;&GT;&GT;
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Python的无对象大致等同于其他语言中的 null , nil 等。
答案 7 :(得分:0)
其中一个变量没有给出任何值,因此它是一个NoneType。您必须查看原因,这可能是您的简单逻辑错误。
答案 8 :(得分:0)
非类型是无类型。
请参阅此处的文档: https://docs.python.org/2/library/types.html#types.NoneType
答案 9 :(得分:0)
当你在函数(def)而不是return中使用print时,它基本上是大小写的
def add(a, b):
print(a+ b)
x = add(5,5)
print(x)
print(type(x))
y = x + 545
print(y)
TypeError: 不支持 + 的操作数类型:'NoneType' 和 'int'
def add(a, b):
return (a+ b)
x = add(5,5)
print(x)
print(type(x))
10
<class 'int'>
555
答案 10 :(得分:0)
None
对象的类型。x is None
而不是 x == None
。None
接受的答案指出的代码。None
使用不以结尾的函数的函数结果
return myvalue
等。代表:
NoneType
类型,
见下文。print(type(None))
时,你会得到
<type 'NoneType'>
。__repr__
的 NoneType
方法产生的。repr
和那个
magic functions
(或“dunder 函数”用于d双下分数)一般。NoneType
是定义在
standard library module types
types
,
大概是因为这种类型只有一个值。type(None)
来访问 NoneType。NoneType
,只需定义
NoneType = type(None)
。NoneType
再次是定义在
standard library module types
,
介绍为了
help type checkers do their work