Python3中字节响应转JSON报错:'str'对象无'read'属性
问题分析与解决方案:
'str' object has no attribute 'read' 错误 错误原因
你碰到的这个报错本质是对Python的json模块里两个方法的使用场景搞混了:
json.load()是为文件对象设计的,它要求传入一个具备.read()方法的流对象(比如用open()打开的文件句柄),所以当你把解码后的字符串传给它时,程序自然会抛出“字符串没有read属性”的错误。- 而你通过
response.decode('utf-8')得到的是一个JSON格式的字符串,这种场景下应该用**json.loads()**——这个方法就是专门用来解析字符串形式的JSON数据的。
修正后的代码
只需要把代码里的json.load(response)替换成json.loads(response)就能解决问题,完整代码如下:
import json import logging LOGGER = logging.getLogger(__name__) response = b'{"message": "test msg 3"}' try: response = response.decode('utf-8') LOGGER.info(response) data = json.loads(response) # 替换为loads方法 message = data["message"] print(f"成功获取消息:{message}") except AttributeError as err: message = "Message not delivered..." LOGGER.warning(err)
额外小技巧
如果你的字节响应来自网络请求(比如使用requests库),其实可以直接调用响应对象的.json()方法,一步完成解码和解析,代码会更简洁:
# 假设response是requests.get()返回的响应对象 data = response.json() message = data["message"]
内容的提问来源于stack exchange,提问作者st_ahmed
相关产品推荐
相关产品推荐

