我尝试使用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'对象没有属性'编码'
然而,当我使用它时,它可以工作:
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不是None'测试而不是。 如果summary.text不是None:
我刚刚从R转移到python,并试图弄清楚为什么会发生这种情况。
添加确切的错误:
Traceback (most recent call last):
文件"",第1行,in runfile(' D:/XML_Parsev1.0.py' ;, wdir =' D:')
文件" C:\ Python27 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py",第601行,在runfile中 execfile(filename,namespace)
文件" C:\ Python27 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py",第66行,在execfile中 exec(compile(scripttext,filename,' exec'),glob,loc)
文件" D:/XML_Parsev1.0.py",第69行,in summary = curTag.find(' summary')。text.encode(' utf8')
AttributeError:' NoneType'对象没有属性'编码'
答案 0 :(得分:1)
您的摘要标记似乎为空,因此curTag.find('summary').text
等于None
。
您无法对None
进行编码,因为None
不是字符串。
这是一个快速的解决方法:
if summary:
summary = (curTag.find('summary').text or '').encode('utf8')
这是有效的,因为如果summary.text
是None
,那么or
语句将返回一个完全可编码的空字符串。