什么是'NoneType'对象?

问题描述 投票:58回答:9

我在运行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)
python null nonetype
9个回答
61
投票

NoneTypeNone对象的类型,它是一个没有值的对象。 None是“不返回任何东西”的函数的返回值。它也是搜索某些东西的功能的常见默认返回值,可能会或可能找不到它;例如,当正则表达式不匹配时由re.search返回,或者当密钥在dict中没有条目时由dict.get返回。您不能将None添加到字符串或其他对象。

你的一个变量是None,而不是字符串。也许你忘记了return的一个功能,或者用户没有提供命令行选项,optparse给了你None该选项的价值。当您尝试将None添加到字符串时,您会得到该异常:

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

其中一个groupSNMPGROUPCMDV3PRIVCMDNone作为其价值。


19
投票

NoneType只是None单身人士的类型:

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

从上面的链接:

None

NoneType类型的唯一价值。 None经常用于表示缺少值,因为默认参数未传递给函数。分配到None是非法的,并提出SyntaxError

在您的情况下,看起来您尝试连接的项目之一是None,因此您的错误。


15
投票

这意味着你正在尝试将字符串与None连接起来。

没有是Python的“null”,而NoneType就是它的类型。

此代码将引发同样的错误:

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

10
投票

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

if obj is None:

要么

if obj is not None:

3
投票

在Python中,为了表示缺少值,可以使用Nonetypes.NoneType.None


2
投票

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

你通常不需要关心NoneType,但在这个例子中,有必要知道type(None) == NoneType


1
投票

你的错误是由于这样的事情发生的: >>> 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等。


0
投票

其中一个变量没有给出任何值,因此它是一个NoneType。你必须研究为什么这样,你可能是一个简单的逻辑错误。


0
投票

非类型是None的类型。

请参阅此处的文档:https://docs.python.org/2/library/types.html#types.NoneType

© www.soinside.com 2019 - 2024. All rights reserved.