什么是“NoneType”对象?

2025-02-13 08:36:00
admin
原创
84
摘要:问题描述:当我运行我的 python 脚本时出现此错误:TypeError: cannot concatenate 'str' and 'NoneType' objects 我很确定“str”表示字符串,但我不知道“NoneType”对象是什么。我的脚本在第二行出错了,我知道第一行可以工作,因为该行的命令如我...

问题描述:

当我运行我的 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)

groupSNMPGROUPCMD或之一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 中,为了表示值的缺失,可以使用Nonetypes.NoneType.None

解决方案 7:

在错误消息中,NonePython 解释器不会通过显示它们的值(本例中为字符串和)来告诉您无法连接两个对象,而是通过显示您尝试连接的对象的类型来告诉您这一点。每个字符串的类型为,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对象大致相当于其他语言中的nullnil等。

解决方案 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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用