rpclib 是一個非常好用的 python webservice 庫,可以動態的生成 wsdl, 不過這個項目已經基本停止,並被一個新的項目取代 spyne,由於舊的項目 工作已經比較穩定,所以我沒有貿然升級到 spyne。
我在 rpclib 編寫 service 方法時,遇到一個奇怪的錯誤: 訪問 wsdl (http://localhost:9898/?wsdl) 頁面,返回 502 Bad Gateway。
在日志中看到如下錯誤信息:
代碼如下: ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
我檢查了代碼,對比了之前可以工作的版本,發現並沒有什麼不對的地方。
? 1 2 3 4 5 6 7 8 9 @srpc(RequestModel, _returns=Unicode) def shenzhen(request): """ 根據傳入的token、車牌號及車駕號,以及驗證碼 查詢該車輛的違章記錄 """ logging.info(request) query = ShenZhenQuery(request) return query.query_car_records()但就是沒有正確生成 wsdl,後來我刪除了方法內所有的內容(包括注釋),只留下一條返回 unicode 字符串的語句,然後就工作正常了,但是當我加入了方法的文檔注釋後,又出來了之前的錯誤,於是我 懷疑到了注釋上:中文的注釋,卻沒有使用 unicode 字符串,於是使用 u"" 中文注釋 """ 後,一切正常!
查看生成的 wsdl,發現原來原來 rpclib 使用注釋生成了
代碼如下: <wsdl:documentation>
根據傳入的token、車牌號及車駕號,以及驗證碼 查詢該車輛的違章記錄
代碼如下: </wsdl:documentation>
難怪一遇到中文注釋就會出錯!
注< >:更多精彩教程請關注三聯編程