gpt4 book ai didi

python - lxml 'None' 类型不是 None

转载 作者:数据小太阳 更新时间:2023-10-29 02:17:33 29 4
gpt4 key购买 nike

我想将我设置为 None 的变量与 is 进行比较,但它失败了。

当我使用 == 将此变量与 None 进行比较时,它起作用了。

这就是我所说的变量:

print type(xml.a) -> <type 'lxml.objectify.StringElement'>

因为我使用的一些库将 None 作为默认参数(即 def f(x=None)),所以我之前像这样转换了空字符串:

if xml.a == '':
xml.a = None

之后类型变为:

print type(xml.a) -> <type 'lxml.objectify.NoneElement'>

这与以下内容不同:

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

当我如上所述比较这个值时,我得到以下结果:

if xml.a is None:
print 'what I expect'
else:
print 'what I do NOT expect' # sadly this one is printed

if xml.a == None:
print 'what I do NOT expect' # this one is printed again...
else:
print 'what I expect'

我已经知道,当比较不是同一个实例的对象时,is 返回false。但我的理解是,我之前已将 xml.a 设置为 None 实例。另一方面,它们的类型不匹配,is 返回 false,因此它不能是与 None 相同的实例。

  • 为什么?
  • 除了使用 == 我别无选择吗?

对于那些想更多地了解 isisinstance 之间区别的人,已经有关于它的讨论 here .

最佳答案

您正在使用 lxml.objectify API ;此 API 使用特殊对象 来表示对象化 XML 树中的 None 值。当您将 None 分配给 xml.a 时,lxml 会存储该特殊对象,以便它可以将其转换为 XML 文档中的 XML 元素.

您所拥有的不是 None 单例。你有一个 lxml.objectify.NoneElement class 的实例相反。

您可以改为测试该元素的类型:

from lxml.objectify import NoneElement

if isinstance(xml.a, NoneElement):

关于python - lxml 'None' 类型不是 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918190/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com