Python не перехватывает XMLSyntaxError - PullRequest
1 голос
/ 10 апреля 2011

У меня есть следующий код Python + lxml:

def doXMLValidation (xml_file, schema_file):
    '''Validates xml file against schema'''
    s_doc = etree.parse (schema_file)
    schema = etree.XMLSchema (s_doc)
    x_file = etree.parse(xml_file)

    try:
        schema.assertValid(x_file)
    except etree.XMLSyntaxError as e:
        print (_formatXMLError(e))
        return False
    except etree.DocumentInvalid as e:
        print (_formatXMLError(e))
        return False
    except:
        print ('Something strange...')
        return False
    else:
        return True

Когда я пытаюсь проверить его с поврежденным файлом xml / fb2 (тег удален), я ожидаю получить исключение XMLSyntaxError с правильной обработкой.Однако вместо этого я получаю сбой с этой ошибкой:

.. /. Metadata / .plugins / org.python.pydev.debug / .coverage Traceback (последний вызов был последним):
Файл "../.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/org.python.pydev.debug_1.5.9.2010063001/pysrc/coverage.py", строка 1029, в the_coverage.command_line (sys.argv [1:]) Файл "../.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/org.python.pydev.debug_1.5.9.2010063001/pysrc/coverage.py", строка 405, в файле командной строки execfile (sys.argv [0], main ._ dict _) Файл "../workspace/PythonPractice/src/lxmlValidation.py", строка 58, в файле test () "../workspace/PythonPractice/src/lxmlValidation.py ", строка 54, в результате теста = doXMLValidation (источник, схема) Файл" ../workspace/PythonPractice/src/lxmlValidation.py ", строка 31, в doXMLValidation x_file = etree.parse (xml_file) Файл "lxml.etree.pyx", строка 2692, в lxml.etree.parse (src / lxml / lxml.etree.c: 49594) Файл "parser.pxi", строка 1500, в lxml.etree._parseDocument (src / lxml / lxml.etree.c: 71364) Файл "parser.pxi", строка 1529, в lxml.etree._parseDocumentFromURL (src / lxml / lxml.etree.c: 71647) Файл "parser.pxi",строка 1429, в lxml.etree._parseDocFromFile (src / lxml / lxml.etree.c: 70742) Файл "parser.pxi", строка 975, в lxml.etree._BaseParser._parseDocFromFile (src / lxree / lxml.: 67740) Файл "parser.pxi", строка 539, в lxml.etree._ParserContext._handleParseResultDoc (src / lxml / lxml.etree.c: 63824) Файл "parser.pxi", строка 625, в lxml.etree._handleParse(src / lxml / lxml.etree.c: 64745) Файл "parser.pxi", строка 565, в lxml.etree._raiseParseError (src / lxml / lxml.etree.c: 64088) lxml.etree.XMLSyntaxError: Несоответствие открывающего и завершающего тегов: строка 7 и p, строка 7, столбец 46

В чем может быть проблема и как ее решить?

UPD: Lol, понял, спасибо всем:

def doXMLValidation (xml_file, schema_file):
    '''Validates xml file against schema'''
    s_doc = etree.parse (schema_file)
    schema = etree.XMLSchema (s_doc)
    try:
        x_file = etree.parse(xml_file)
        schema.assertValid(x_file)
    except etree.XMLSyntaxError as e:
        print (_formatXMLError(e))
        return False
    except etree.DocumentInvalid as e:
        print (_formatXMLError(e))
        return False
    except:
        print ('Something strange...')
        return False
    else:
        return True

Мысль, что lxml будет более приятным при разборе ...

1 Ответ

1 голос
/ 10 апреля 2011

у вас нет попытки перед оператором, вызвавшим ошибку.посмотрите на трассировку стека более внимательно.

...