Python没有捕获XMLSyntaxError

Python没有捕获XMLSyntaxError,python,exception,lxml,Python,Exception,Lxml,我有以下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.assertV

我有以下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行,在 覆盖率命令行(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\u dict\u)文件“./workspace/pythonpracce/src/lxmlvalization.py”, 第58行,输入 test()文件“./workspace/pythonpracce/src/lxmlvalization.py”, 第54行,正在测试中 结果=doxmlvalization(源,架构)文件 “./workspace/pythonpracce/src/lxmlvalization.py”, 第31行,在doxmlvalization中 x_file=etree.parse(xml_文件)文件“lxml.etree.pyx”,第2692行,在 lxml.etree.parse (src/lxml/lxml.etree.c:49594)文件 “parser.pxi”,第1500行,在 lxml.etree.\u解析文档 (src/lxml/lxml.etree.c:71364)文件 “parser.pxi”,第1529行,在 lxml.etree.\u parseDocumentFromURL (src/lxml/lxml.etree.c:71647)文件 “parser.pxi”,第1429行,在 lxml.etree.\u parseDocFromFile (src/lxml/lxml.etree.c:70742)文件 “parser.pxi”,第975行,在 lxml.etree.\u BaseParser.\u parseDocFromFile (src/lxml/lxml.etree.c:67740)文件 “parser.pxi”,第539行,在 lxml.etree.\u ParserContext.\u handleParseResultDoc (src/lxml/lxml.etree.c:63824)文件 “parser.pxi”,第625行,在 lxml.etree.\u handleParseResult (src/lxml/lxml.etree.c:64745)文件 “parser.pxi”,第565行,在 lxml.etree.\u raiseParserError (src/lxml/lxml.etree.c:64088) lxml.etree.xmlsyntaxer错误:开头和结尾标记不匹配:a第7行和p第7行第46列

问题可能是什么?如何解决

UPD:哈哈,明白了,谢谢大家:

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在解析时会更容易理解…

在导致错误的语句出现之前,您不必进行尝试。请更仔细地查看堆栈跟踪。

再次在此-如果您有其他信息,请编辑您的答案。一句评论并不是为了达到目的this@EliBendersky,请给我发邮件到unternet.net的jc。谢谢,当然可以。OP采纳了我的建议,解决了他的问题。