Python未捕获XMLSyntaxError

3 投票
1 回答
6986 浏览
提问于 2025-04-16 15:25

我有以下的 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 回溯(最近的调用在最前面):
文件 "../.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 行,在 command_line execfile(sys.argv[0], main._dict_) 文件 "../workspace/PythonPractice/src/lxmlValidation.py", 第 58 行,在 test() 文件 "../workspace/PythonPractice/src/lxmlValidation.py", 第 54 行,在 test result = doXMLValidation (source, schema) 文件 "../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/lxml/lxml.etree.c:67740) 文件 "parser.pxi", 第 539 行,在 lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:63824) 文件 "parser.pxi", 第 625 行,在 lxml.etree._handleParseResult (src/lxml/lxml.etree.c:64745) 文件 "parser.pxi", 第 565 行,在 lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64088) lxml.etree.XMLSyntaxError: 开始和结束标签不匹配:在第 7 行的 a 和 p,位于第 7 行,第 46 列

这可能是什么问题,怎么解决呢?

更新:哈哈,明白了,谢谢大家:

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 个回答

3

你在出错的语句之前没有进行尝试。仔细看看错误信息的详细内容。

撰写回答