我解析從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