我想将我设置为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相同的实例。
==,我别无选择吗?对于那些想要更多地了解is和isinstance之间的区别的人,here已经进行了一次讨论。
发布于 2014-09-18 16:51:56
您正在使用 API;这个API使用一个特殊的对象来表示对象化的None树中的None值。当您将None分配给xml.a时,lxml会存储该特殊对象,以便它可以将该对象转换为XML文档中的XML元素。
您所拥有的是而不是的None单例。相反,您有一个 class实例。
您可以测试该元素的类型:
from lxml.objectify import NoneElement
if isinstance(xml.a, NoneElement):https://stackoverflow.com/questions/25918190
复制相似问题