我解析从Web服务SOAP API通过皂液客户端返回的对象意外的属性错误
我有attributeObjects的列表,像
(defectStateAttributeValueDataObj){
attributeDefinitionId =
(attributeDefinitionIdDataObj){
name = "Comment"
}
attributeValueId =
(attributeValueIdDataObj){
name = "Owner changed because of default owner assignment specified in the component map"
}
}
和
(defectStateAttributeValueDataObj){
attributeDefinitionId =
(attributeDefinitionIdDataObj){
name = "OwnerName"
}
attributeValueId =
(attributeValueIdDataObj){
name = "Schmoe, Joe"
}
}
我使用以下循环提取键/值对:
for defect in myDefectsPage.mergedDefects :
print defect.cid,
for attribute in defect.defectStateAttributeValues:
print attribute
attr= attribute.attributeDefinitionId.name
val=attribute.attributeValueId.name
print attr,'=',val,
print ""
(以上对象是打印属性命令的结果)
这将如预期对于每一个属性,除了一个其中attribute.attributeDefinitionId.name ==对于一个I“注释”
得到
回溯(最后最近一次调用): 文件,63行,在 VAL = attribute.attributeValueId.name AttributeError的: '文本' 对象有没有属性 '名'
这很奇怪,因为如果使用 VAL = attribute.attributeValueId#.NAME 它将打印
Commment =(attributeValueIdDataObj){ 名称=“所有者改变,因为在组件映射指定的默认所有者分配的” }
所以它看起来像是一个attributeValueIdDataObj并且有一个名称属性。
我使用了suds DEBUG日志记录和XML返回元素看起来完全一样,无论attribute.attributeDefinitionId.name是什么。
我也没办法试图访问的name属性
任何想法时,它如何改变成“文本”的对象?
解决方法: 值Id = attribute.attributeValueId 如果hasattr(VALUEID, '名'): VAL = VALUEID。名称 else: val = valueId 工作,它表明它确实是一个attributeValueIdDataObj,它有一个名称属性,只是hasattr()处理AttributeError异常,而getattr()或.name则不处理。 奇怪... – user3795282