热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python中ElementTree与cElementTree的差异及兼容性问题

本文探讨了在Python脚本中使用ElementTree和cElementTree进行XML解析时遇到的问题,特别是在不同版本的Python中,cElementTree可能引发的ParseError异常。

在编写用于解析XML文件的Python脚本时,可能会选择使用ElementTree或其C语言加速版cElementTree。然而,有时会遇到这样的情况:同样的代码片段在使用ElementTree时能够正常运行,而换成cElementTree后却无法工作,抛出错误。

例如,下面的代码片段在尝试从标准输入读取XML数据并使用cElementTree进行解析时,会在Python 3.2.2或3.1.4版本中引发cElementTree.ParseError: no element found: line 1, column 0的异常:

#!/usr/bin/python3
import sys
import xml.etree.cElementTree as ET
tree = ET.parse(sys.stdin)

当通过命令行向此脚本传递简单的XML标签时,如:echo "c" | ./xmltest.py,上述错误就会出现。

值得注意的是,这段代码在Python 2.7.2中可以正常运行,但在Python 3.2.2或3.1.4中则会出现问题。这一现象表明,可能是Python 3.x系列中的某些变更导致了cElementTree的行为差异。

幸运的是,在Python 3.3中,这个问题得到了修复。对于那些需要在Python 3.2或更低版本中运行代码的开发者来说,可以通过将sys.stdin转换为字节流来绕过这个限制:

import sys
import xml.etree.cElementTree as ET
sys.stdin = sys.stdin.detach()
tree = ET.parse(sys.stdin)

这一改动使得即使在较旧的Python版本中,也能成功使用cElementTree解析XML数据。


推荐阅读
author-avatar
冷向泽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有