Python 2.7 将工具从windows迁移到linux时发生lxml错误
我在Python2.7中开发了一个工具,它将xsd文件作为输入, 并将过程数据放入测试文件中 在处理我使用的lxml文件xsd期间,我无法解决此类错误Python 2.7 将工具从windows迁移到linux时发生lxml错误,python-2.7,lxml,Python 2.7,Lxml,我在Python2.7中开发了一个工具,它将xsd文件作为输入, 并将过程数据放入测试文件中 在处理我使用的lxml文件xsd期间,我无法解决此类错误 AttributeError: 'Element' object has no attribute 'iterdescendants' 我不知道lxml库有什么问题 我想知道python 2.7是否有任何与Linux兼容的版本 我已在文件中导入如下内容: try: from lxml import etree except Impor
AttributeError: 'Element' object has no attribute 'iterdescendants'
我不知道lxml库有什么问题
我想知道python 2.7是否有任何与Linux兼容的版本
我已在文件中导入如下内容:
try:
from lxml import etree
except ImportError:
import xml.etree.ElementTree as etree
我只在文件中导入了元素,并将处理该元素的元素树指针发送到另一个文件中,
在声明的文件中是OK的,仅在另一个文件中给出错误
引发错误的代码是:
for tdocNode in lincFileRootNode:
rootNode = tdocNode.getroot()
lchildren = rootNode.getchildren()
for elt in lchildren:
if 'complex' == elt.tag:
if 'name' in elt.attrib:
if 'element' == item.tag:
if 'type' in item.attrib:
if elt.attrib['name'] == item.attrib['type']:
for key in elt.iterdescendants(tag='element'):
bIsElemTypeSimple = false
bIsElemTypeSimple = process_elementtype(key, lincFileRootNode)
其中:
lincFileRootNode --> is list that containe the xsd file pointer to be processed
引发的错误是:
Traceback (most recent call last):
File "run.py", line 1210, in <module>
iret = xsd2dic_main()
File "run.py", line 71, in xsd2dic_main
iRet = yxsdtodic()
File "run.py", line 352, in yxsdtodic
iret = process_xsdfile(sXsdPath)
File "run.py", line 485, in xsdfile
sRet = process_dic_elementtype(item,lincFileRootNode)
File "run.py", line 817, in process_dic_elementtype
for key in elt.iterdescendants(tag='element'):
AttributeError: 'Element' object has no attribute 'iterdescendants'
回溯(最近一次呼叫最后一次):
文件“run.py”,第1210行,在
iret=xsd2dic_main()
xsd2dic_main中第71行的文件“run.py”
iRet=yxsdtodic()
YXSTODIC中第352行的文件“run.py”
iret=processxsdfile(sXsdPath)
xsdfile中第485行的文件“run.py”
sRet=进程\u dic\u元素类型(项目,lincFileRootNode)
文件“run.py”,第817行,进程中元素类型
对于elt.ITerDescents中的键(tag='element'):
AttributeError:“Element”对象没有属性“IterDescents”
在这两种情况下,我都感到疲劳:
1:将所有代码写入同一个文件中
2:写入不同的文件
不过我还是得到了同样的错误,这主要是猜测,但请仔细研究一下
您似乎是从
lxml
的元素的实现
类型调用的。但是,如果lxml
导入失败,您将转而使用Python内置的xml
库。但是它的实现没有任何类型的iterdescendants
方法。换句话说,这两个实现具有不同的公共API。添加一些print
语句以查看要导入的库,并进行一些额外的检查,以查看类型
是什么。如果您希望能够使用Python内置的xml
,则需要对代码进行结构化以适应不同的API。解决问题所需的任何其他信息请告诉我,因为导入不会导致错误,最好将其从问题中删除。相反,确定实际使用的导入,在问题中指出,并向我们显示引发错误的代码。如果你能创建一个。(你甚至可以自己在这个过程中找到答案。)我已经更新了场景和代码snipest,当我打印“elt”时,它的打印方式当打印“elt”时:我如何打印它是哪个库using@AzamKhan通过在try/except中放入print
语句,可以判断正在使用哪个导入。你正在接受一个例外。除非你在里面放了一些代码来通知某人,否则你根本不知道发生了什么。这就是为什么默默地接受异常是不好的。我不清楚你在说什么,现在我只是使用import xml.etree.ElementTree作为etree,但我没有得到你想要的。我没有意识到你取消了lxml
导入;我不明白你在哪里提到的。如果这是正确的,那么错误是因为xml
API中不存在此方法。当您在lchildren
上循环时,它包含xml.etree.ElementTree.Element
对象,而这些对象没有iterdescendants
方法,正如我在回答中提到的那样。如果要使用xml.etree
,必须重写代码以使用其方法。