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

标签 python xml parsing

我正在尝试使用 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.textNone,则 or 语句将返回一个完全可编码的空字符串。

关于Python XML解析- "is not None"的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274229/

相关文章:

java - 如何将 Restful 服务上的字符串转换为 xml 文件以进行 xsd 验证

java - SimpleDateFormat 中日期解析的错误行为

c++ - 用 C++ 扩展 Python 3

python - 我正在尝试创建一个倒计时器,但它不起作用

c# - 覆盖 xml 文件值

xml - 对 XML 文件使用内联 XSLT

java - JSON:解析数组的ArrayNode

Python RoboBrowser - 如何从此页面获取内容

python - 查询期间失去与 MySQL 服务器的连接

python - 添加列表和 NumPy 数字