当前位置: 首页 > 工具软件 > type > 使用案例 >

python中nonetype指什么_关于python:什么是’NoneType’对象?

盖高畅
2023-12-01

当我运行python脚本时,我得到了这个错误:

TypeError: cannot concatenate 'str' and 'NoneType' objects

我很确定"str"是指字符串,但我不知道"nonetype"对象是什么。我的脚本停在第二行,我知道第一行有效,因为来自该行的命令如我所期望的那样在我的ASA中。起初我认为这可能是因为我在send_命令中使用变量和用户输入。

"caps"中的所有内容都是变量,"小写"中的所有内容都是来自"parser.add"选项的输入。

我用的是pexpect和optparse

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)

我们需要看到更多的代码,而input-noneteoe意味着其中一个变量尚未设置。

NoneType是单个值None的类型。其中一个值不是字符串。

快速&脏:将每个术语连接到str()str(snmpsrvuscrmd)+str(snmpuser)+

@彼得曼,这是一个可怕的想法——问题将进一步显现出来(也许更糟)。最好弄清楚为什么其中一个变量一开始就没有了。

考虑到关于NoneType的问题被提出、投票和保存的频率有多高,我认为python核心开发人员应该从错误消息中删除所有对NoneType的引用。它除了迷惑人们之外,没有其他目的。None不可重新分配(None=1不可能),是单例(NoneType的唯一实例),是关键字(因此在任何地方都可用,NoneType不是)。所以我不知道为什么这些错误不能仅仅把它称为None。这并不是说任何人可能会被"str"和"none"之间的连接和"wonder wait"混淆,这又是什么"none"?

NoneType是None对象的类型,该对象表示没有值。None是"不返回任何内容"函数的返回值。它也是搜索某些内容的函数的一个常见的默认返回值,可能会或可能不会找到它;例如,当regex不匹配时,它由re.search返回;当dict中没有条目时,它由dict.get返回。不能将None添加到字符串或其他对象。

其中一个变量是None,而不是字符串。也许你在某个函数中忘记了return,或者用户没有提供命令行选项,optparse给了你该选项的值None。当您试图将None添加到字符串中时,会得到以下异常:

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

group或SNMPGROUPCMD或V3PRIVCMD中的一个值为None。

谢谢!!如果正确,出于某种原因,我的一个用户输入选项未被采用。我把它作为一个"名字"和一个选项加起来,很有效。现在我只需要找出为什么这不是一个正确的选择,所有其他的选择都工作得很好。

"not set"有点模糊……如果一个变量没有定义,并且您试图用它执行一些操作,那么您应该得到一个NameError。它也可以设置,但等于None(设置为Nothing"="Not Set"?)然后你可能会得到一些TypeError。

基本上(这里的C/Java用户)没有空

NoneType只是None单体的类型:

>>> type(None)

从上面的后一个链接:

None

The sole value of the type NoneType. None is frequently used to represent the absence of a value, as when default arguments are not passed to a function. Assignments to None are illegal and raise a SyntaxError.

在您的例子中,您试图连接的项目之一是None,因此出现了错误。

这意味着您试图将字符串与None连接起来。

none是python的"null",NoneType是它的类型。

此代码将引发相同类型的错误:

>>> bar ="something"

>>> foo = None

>>> print foo + bar

TypeError: cannot concatenate 'str' and 'NoneType' objects

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

if obj is None:

if obj is not None:

注意,相等运算符==在这里不起作用。

"is"只能在需要时使用。最好的防御编程是测试,很多测试。

防御编程是最邪恶的事情之一。如果你发现这样的错误,这意味着你做了一个错误的编程。像"使用前检查空值"这样的东西只隐藏了一些严重的错误。您应该让异常被抛出。而且不要让程序员抛出一些定制的异常,这真的很麻烦。让自然错误被抛出。实际上,防御性编程是您应该使用另一种语言的症状。

在python中,为了表示没有值,可以使用None值types.NoneType.None。

对于python 3,请参见:stackoverflow.com/questions/21706609/…

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

您通常不需要关心NoneType,但在本例中,必须知道type(None) == NoneType。

我有一个非常类似的问题,试图检测对象是否是非类型的,你的肯定对我不起作用:>>> type(key) >>> type(key) == NoneType Traceback (most recent call last): File"", line 1, in NameError: name 'NoneType' is not defined。

@rubick NoneType在任何地方都没有定义(我知道)。如果要检查值是否为None,只需使用key is None(请参阅stackoverflow.com/questions/23086383/…)。否则,您可以使用type(key) == type(None)达到同样的效果。

发生错误的原因如下:>>> None +"hello world"

Traceback (most recent call last):

File"", line 1, in TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'>>

在其他语言中,python的none对象大致相当于null、nil等。

none type是none的类型。

请参阅以下文档:https://docs.python.org/2/library/types.html types.nonetype

其中一个变量没有给定任何值,因此它是非类型的。你得研究一下为什么会这样,这可能是你的一个简单的逻辑错误。

 类似资料: