Как мне иметь дело с XMLSyntaxError в Python lxml при анализе большого файла XML?

Я пытаюсь проанализировать файл XML размером более 2 ГБ с библиотекой Python lxml. К сожалению, в XML-файле нет строки, указывающей кодировку символов, поэтому я должен установить ее вручную. Хотя при переборе файла все же появляются странные символы, которые появляются время от времени.

Я не уверен, как определить кодировку символов строки, но, кроме того, lxml вызовет ошибку XMLSyntaxError из области действия цикла for. Как я могу правильно уловить эту ошибку и правильно с ней справиться? Вот упрощенный фрагмент кода:

from lxml import etree
etparse = etree.iterparse(file("my_file.xml", 'r'), events=("start",), encoding="CP1252")
for event, elem in etparse:
    if elem.tag == "product":
        print "Found the product!"
        elem.clear()

В конечном итоге это приводит к ошибке:

XMLSyntaxError: PCDATA invalid Char value 31, line 1565367, column 50

Эта строка файла выглядит так:

% sed -n "1565367 p" my_file.xml
<romance_copy>Ravioli Florentine. Tender Ravioli Filled With Creamy Ricotta Cheese And

'F' заполнено на самом деле выглядит так в моем терминале:

Ответы на вопрос(4)

Ваш ответ на вопрос