سؤال

لدي مقتطف صغير من لغة بايثون لتحليل 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، هل لديك أي فكرة عن السبب؟

تحديث: يبدو أنه تم إصلاحه في بيثون 3.3

هل كانت مفيدة؟

المحلول

لقد واجهت الخطأ الذي تم توثيقه مؤخرًا في العدد 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top