Python處理HTTP返回包遇到問題總結TypeError、keyError、SyntaxError、AttributeError


處理HTTP返回包包括對關鍵參數的校驗,參數完整性檢驗,獲取返回包參數的方法,返回包數據去重方法

在執行時遇到不少問題,部分問題記錄如下:

1、報錯信息:“TypeError: list indices must be integers or slices, not str”

排查發現:查詢出的數據是列表類型,而不是字典類型,再排查發現調用的方法有問題導致查詢出來的結果不對

本來是要調用查詢數據庫的方法select_one(),然后編寫代碼時根據提示選錯了方法,選擇了op_sql方法,導致返回的結果不是字典,而是列表

問題解決:將調用方法改為select_one()解決

params_interface = opration_db.select_one(sen_sql)

2、報錯信息“keyError:'result_interface' ”   “keyError:'id'”  

 

查看報錯提示,沒有找到對應的下標為result_interface和id的參數,設置斷點輸出對應的數據,發現確實沒有這兩個字段,定位下來:為什么會沒有這兩個字段呢,再次查看原來查詢語句時並未查詢這兩個字段,加上查詢對應的字段就能解決該問題

3、報錯信息“TypeError:not all arguments converted during string formatting”和“SyntaxError: unexpected EOF while parsing”

“TypeError:not all arguments converted during string formatting”:是因為print輸出時定義了一個參數占位符,但是后面的參數有兩個,多加一個占位符就可以解決問題

“SyntaxError: unexpected EOF while parsing”:看日志是列表數據少了結束符合‘]’,加上解決問題

4、比較完整性參數值正確,但是一點點在方法運行后輸出卻為空

 debug時發現調用__recur_params方法后數據變為空值的,然后查看發現編寫腳本時少寫了繼續調用本方法的代碼,加上后又出現了問題5的報錯

self.__recur_params(temp_result_interface)

5、報錯信息“Message: AttributeError("'dict' object has no attribute 'startswith'")”

Message: AttributeError("'dict' object has no attribute 'startswith'"):字典對象沒有startswith屬性,就是說這個時候傳入的比較值已經是字典類型而不是字符串類型了,startswith()方法是字符串的方法,所以就會報錯

if result_interface.startswith('{') and isinstance(result_interface, str):

查看代碼發現判斷時先判斷字符串的開始是否為“{”開頭,再判斷傳入的值是否為字符串,這個判斷邏輯有問題;將判斷是否為字符串先判斷,若為字符串后才進行判斷字符串的開頭字符就能解決問題

if isinstance(result_interface, str) and result_interface.startswith('{'):

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM