我正在尝试使用 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' 对象没有属性 '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.text
为 None
,则 or
语句将返回一个完全可编码的空字符串。
关于Python XML解析- "is not None"的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274229/