背景
最近原来运行的好好的代码突然异常了,检查下日志,发现有如下的报错:
1 | Traceback (most recent call last): |
思路
从报错上看,是由于类型不匹配导致的。
在用python发请求时,response.status_code
返回的是int
类型的,通过用来判断返回是否正常:
1 | if response.status_code == 200: |
所以在输出字符串的时候,前面加了str()
用来前强制转换成str
类型。
那么问题应该就出在response.body
上了,正常情况response.body
返回应该是字符串,但根据提示,实际上是一个bytes
类型数据。
对实际程序进行调试看下输出:
果然body
输出变成了bytes
类型。
结论
定位了问题,那么该如何转换呢?
通过
str()
转换上面返回是个空值,那么我们也强制转换看下:
1
2
3body = b''
str(body)
"b''"强制转换之后,虽然变成了
str
类型,但会有前缀b''
,虽然不会报错,但明显不是我们想要的。通过
decode()
转换那么编码问题,就尝试用编码解码来解决了。我们用
decode()
试下:1
2body.decode()
''这次就对了。
至于请求的返回结果以前是str
类型,现在变成了bytes
类型,这就不纠结了,毕竟网络瞬息万变,还是要多用多总结。