處理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('{'):