什么是“NoneType”对象?
- 2025-02-13 08:36:00
- admin 原创
- 83
问题描述:
当我运行我的 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)
解决方案 1:
NoneType
是对象None
的类型,即表示没有值的对象。None
是“不返回任何内容”的函数的返回值。它也是搜索某些内容并且可能找到也可能找不到的函数的常见默认返回值;例如,re.search
当正则表达式不匹配时,或者dict.get
当键在字典中没有条目时,它会返回。您不能添加None
到字符串或其他对象。
您的变量之一是None
,而不是字符串。也许您return
在某个函数中忘记了,或者用户没有提供命令行选项,而是optparse
给了您None
该选项的值。当您尝试将其添加None
到字符串时,您会收到以下异常:
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
group
或SNMPGROUPCMD
或之一V3PRIVCMD
具有None
其值。
解决方案 2:
为了防御性编程,在使用之前应该检查对象是否为空。
if obj is None:
或者
if obj is not None:
解决方案 3:
NoneType
只是单例的类型None
:
>>> type(None)
<type 'NoneType'>
来自上面的后一个链接:
None
类型的唯一值
NoneType
.None
经常用于表示值的缺失,例如当默认参数未传递给函数时。 赋值给None
是非法的,并且会引发SyntaxError
.
就您而言,您尝试连接的项目之一是None
,因此出现错误。
解决方案 4:
这意味着您正在尝试将字符串与某个东西连接起来None
。
None 是 Python 的“空”,NoneType
是它的类型。
此代码将引发相同类型的错误:
>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects
解决方案 5:
在 Python 中
NoneType 是对象的类型
None
。这样的对象只有一个。因此,“一个None 对象”和“ None对象”和“ None”是三种表达同一事物的等效方式。
由于所有 None 都是相同的,而不仅仅是相等,因此您应该在代码中
x is None
优先考虑。x == None
None
正如所接受的答案所指出的那样,您将在常规 Python 代码中的许多地方找到它。当你在自己的代码中使用没有以或类似形式
None
结尾的函数的函数结果时,
你也会得到这样的结果。return myvalue
表示:
NoneType
某些版本的 Python 中存在一种类型,但不是全部版本,见下文。执行 时
print(type(None))
,您将得到<type 'NoneType'>
。
这是由 的__repr__
方法生成的NoneType
。一般
请参阅的文档repr
以及
魔法函数
(或“dunder 函数”,因为其名称中有双下划线)的文档。
在 Python 2.7 中
NoneType
是标准库模块中定义的类型types
在 Python 3.0 至 3.9 中
NoneType 已从
模块
中
删除,大概是因为这种类型只有一个值。types
尽管如此,它仍然有效,只是没有内置名称:您可以通过写入来访问 NoneType
type(None)
。如果想
NoneType
返回,只需定义NoneType = type(None)
。
在 Python 3.10+ 中
NoneType
再次是标准库模块types
中定义的类型
,引入它是为了
帮助类型检查器完成工作
解决方案 6:
在 Python 中,为了表示值的缺失,可以使用None
值types.NoneType.None
解决方案 7:
在错误消息中,None
Python 解释器不会通过显示它们的值(本例中为字符串和)来告诉您无法连接两个对象,而是通过显示您尝试连接的对象的类型来告诉您这一点。每个字符串的类型为,str
而单个实例的类型None
称为NoneType
。
通常您不需要关心NoneType
,但在这个例子中,有必要知道type(None) == NoneType
。
解决方案 8:
您的错误是由于以下情况引起的:>>>
`>>> 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等。
解决方案 9:
如果您要获取None
对象的类型,请确保在方法中返回。例如:
class Node:
# node definition
然后,
def some_funct():
# some code
node = Node(self, self.head)
self.head = node
如果您没有从 返回任何内容some_func()
,则返回类型将为,NoneType
因为它没有返回任何内容。
相反,如果返回节点本身(一个对象Node
),它将返回Node-object
类型。
def some_func(self):
node = Node(self, self.head)
self.head = node
return node
解决方案 10:
其中一个变量没有赋值,因此它是 NoneType。您必须查看原因,这可能是您的一个简单逻辑错误。
解决方案 11:
print
例如,当您在函数中将其作为最后一个语句而不是时,它将返回return
:
def add(a, b):
print(a+ b)
x = add(5,5)
print(x)
print(type(x))
y = x + 545
print(y)
TypeError:不支持 + 的操作数类型:“NoneType”和“int”<class“NoneType”>
def add(a, b):
return (a+ b)
x = add(5,5)
print(x)
print(type(x))
10
<class 'int'>
555
解决方案 12:
NoneType
是 的类型None
。
请参阅此处的 Python 2 文档:
https: //docs.python.org/2/library/types.html#types.NoneType
解决方案 13:
NoneType 是 None 的类型。基本上,NoneType 的出现有多种原因,
首先,当你有一个函数和一个条件时(例如),如果该条件不满足,它将返回 None。例如:-
def dummy(x, y): if x > y: return x res = dummy(10, 20) print(res) # Will give None as the condition doesn't meet.
为了解决这个问题,返回 0 的函数,即返回 0,如果条件不满足,函数将以 0 而不是 None 结束。
其次,当你显式地将变量分配给内置方法时,它不会返回任何值,但会返回 None。my_list = [1,2,3] my_list = my_list.sort() print(my_list) #None sort() 会改变 DS,但如果你打印它,则不会返回任何内容。或者 lis = None re = lis.something()) print(re) # 返回属性错误 NonType 对象没有属性 something
扫码咨询,免费领取项目管理大礼包!