Python XML 解析 - 使用 "is not None"

Python XML parsing - use of "is not None"

我正在尝试使用 xml.etree.ElementTree.

解析包含 python 2.7.9 中可选字段的 XML 文档

当我使用以下循环时:

summary = curTag.find('summary')
if summary is not None: 
    summary = curTag.find('summary').text.encode('utf8')
    summary = summary.replace("'","'||chr(39)||'")
    summary = summary[:4000]

我收到错误 - AttributeError: 'NoneType' object has no attribute 'encode'

但是当我使用时它有效:

summary = curTag.find('summary')
if summary: 
    summary = curTag.find('summary').text.encode('utf8')
    summary = summary.replace("'","'||chr(39)||'")
    summary = summary[:4000]

但是,我收到警告 - FutureWarning:此方法的行为将在未来版本中更改。请改用特定的 'len(elem)' 或 'elem is not None' 测试。 如果 summary.text 不是 None:

我刚从 R 转到 python,我想弄清楚为什么会这样。


添加准确的错误:

Traceback (most recent call last):

文件“”,第 1 行,位于 runfile('D:/XML_Parsev1.0.py', wdir='D:')

文件 "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py",第 601 行,在运行文件中 execfile(文件名,命名空间)

文件 "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py",第 66 行,在 execfile 中 exec(编译(脚本文本,文件名,'exec'),glob,loc)

文件 "D:/XML_Parsev1.0.py",第 69 行,在 摘要 = curTag.find('summary').text.encode('utf8')

AttributeError: 'NoneType' 对象没有属性 'encode'

您的摘要标签似乎是空的,因此 curTag.find('summary').text 等于 None

您无法对 None 进行编码,因为 None 不是字符串。

这是一个快速解决方法:

if summary: 
    summary = (curTag.find('summary').text or '').encode('utf8')

这是可行的,因为如果 summary.textNone,那么 or 语句将 return 一个完全可编码的空字符串。