使用python的suds包調用webservice服務接口,報錯:AttributeError: 'Document' object has no attribute 'set'
調用服務接口代碼:
#coding=utf-8
from suds.client import Client client = Client('http://port.patentstar.cn/bns/PtDataSvc.asmx?wsdl') print client pt = client.factory.create('PatentDataType') res = client.service.GetPatentData('DE10327589B4',pt.PDFFileUrl) print res
WSDL服務結構:
報錯信息:
解決方法:
通過上圖錯誤信息,錯誤指定到了appender.py 中的append函數 (此函數注釋是我自己更改的)
以下是報暴出錯誤,的函數:
通過,對該函數分析,如果傳過來的參數以_下止划線開頭,會進行一個特列處理。
服務接口函數,兩個參數都是以下划線開頭。
報錯的行為:parent.set(attr,value)
我們服務接口,參數名都是以下划線開頭。於是分析之后,將關於處理下划線的代碼行注釋掉。
更改了suds,包中的文件后,重新調用服務接口。
結果如下:成功返回正確結果
至此,問題解決了,問題原因,應該是suds包的作者,沒有考慮到其它服務接口,參數以下划線開頭。
因為在python中下划線開頭的變量,有特殊意義,是私有的。
以上是個人理解,如果個位大神,分析出有其它原因,分享一下。多謝謝。