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

 

猜你喜欢

转载自www.cnblogs.com/dancy0dante/p/12727054.html