什么是'NoneType'对象?

ins*_*-IT 67 python null nonetype

我在运行python脚本时收到此错误:

TypeError: cannot concatenate 'str' and 'NoneType' objects
Run Code Online (Sandbox Code Playgroud)

我很确定'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)
Run Code Online (Sandbox Code Playgroud)

Bur*_*lid 65

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

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

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
Run Code Online (Sandbox Code Playgroud)

其中一个groupSNMPGROUPCMDV3PRIVCMDNone其价值.


ars*_*jii 21

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

>>> type(None)
<type 'NoneType'>
Run Code Online (Sandbox Code Playgroud)

从上面的链接:

None

该类型的唯一价值NoneType.None经常用于表示缺少值,因为默认参数未传递给函数.作业None是非法的并且提出了SyntaxError.

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


And*_*zlo 15

这意味着您正在尝试将字符串与某些字符串连接起来None.

没有是Python的"null",NoneType它是它的类型.

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

>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects
Run Code Online (Sandbox Code Playgroud)


Gür*_*bek 12

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

if obj is None:
Run Code Online (Sandbox Code Playgroud)

要么

if obj is not None:
Run Code Online (Sandbox Code Playgroud)

  • 我通过 sqlAlchemy 查询数据库。没有结果。返回的对象是 None。这意味着没有结果。没有错误。您检查结果是否为 None,如果不是,则使用结果对象。这没什么不好的。编程最邪恶的就是教条主义。 (3认同)
  • 注意,等于运算符`==`在这里不起作用. (2认同)
  • 只有在你需要的时候才能使用"是".最好的防御性编程是测试,大量测试. (2认同)
  • 防御性编程是最邪恶的事情之一。如果你发现了这样的错误,这意味着你在编程中犯了一个错误。诸如“使用前检查空值”之类的东西只会隐藏一些严重的错误。你应该让异常被抛出。而且不要让程序员抛出一些自定义的异常,真的很麻烦。让自然错误被抛出。事实上,防御性编程是您应该使用另一种语言的一种症状。 (2认同)

Lut*_*elt 11

在Python中

  • NoneType 是对象的类型None
  • 这样的物体只有一个。因此,“ a None 对象”和“ the None 对象”和“None”是表示同一事物的三种等效方式。
  • 由于所有 None 都是相同的,而且不仅相等,因此您应该在代码中选择x is Noneover 。x == None
  • None正如已接受的答案所指出的那样,您将在常规 Python 代码中找到许多地方。
  • 当您使用不以或类似None结尾的函数的函数结果时, 您也会进入自己的代码。return myvalue

表示:

  • NoneType在某些但不是所有版本的 Python 中都有一种类型,请参见下文。
  • 当你执行时print(type(None)),你会得到 <type 'NoneType'>
    这是通过__repr__的方法产生的NoneType。一般来说,
    请参阅魔法函数(或名称中的下划线的 “dunder 函数” ) 的 文档。repr

在Python 2.7中

在 Python 3.0 到 3.9 中

  • NoneType 已从 module删除,大概是因为这种类型只有一个值。types
  • 尽管如此,它实际上仍然存在,只是没有内置名称:您可以通过编写 来访问 NoneType type(None)
  • 如果你想NoneType回来,只需定义 NoneType = type(None).

在 Python 3.10+ 中