ElementTree和cElementTree有何区别?

4

我有一个使用ElementTree的Python小段代码,但是它不能使用cElementTree。为什么会这样呢?

#!/usr/bin/python3

import sys
import xml.etree.cElementTree as ET

tree = ET.parse(sys.stdin)

这会引发异常:

cElementTree.ParseError: no element found: line 1, column 0

当像这样调用它时:
echo "<a><b>c</b></a>" | ./xmltest.py

编辑:我刚刚注意到这个代码段可以在Python 2.7.2中运行,但无法在Python 3.2.2或3.1.4中运行。有什么想法吗?

更新:看起来在Python 3.3中已经修复了该问题。


你看过这个 Stack Overflow 的问题吗?你的情况是一个 Unicode 问题吗? - Lev Levitsky
虽然它看起来是相关的,但我不认为我可以使用utf8编码“重新打开”sys.stdin,对吗? - Fabian Henze
这是一个类似的问题,与https://dev59.com/oHE95IYBdhLWcg3wWMdQ?rq=1相同吗? - staticor
1个回答

4

最近你遇到了在问题 14246中记录的错误。 在修复之前,Python 3 的一个解决方法是将sys.stdin更改为字节流而不是字符串流:

import sys
import xml.etree.cElementTree as ET

sys.stdin = sys.stdin.detach()
tree = ET.parse(sys.stdin)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接