ElementTree / cElementTree разница? - PullRequest
4 голосов
/ 12 марта 2012

У меня есть небольшой фрагмент кода Python для синтаксического анализа XML, который работает с ElementTree, но не с 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

1 Ответ

4 голосов
/ 12 марта 2012

Вы столкнулись с ошибкой, недавно задокументированной в Выпуск 14246 .Пока это не исправлено, одним из обходных путей для Python 3 является изменение sys.stdin на поток byte вместо потока string:

import sys
import xml.etree.cElementTree as ET

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