TypeError:无法对类字节对象api使用字符串模式

2024-09-29 21:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

import json
import urllib.request, urllib.error, urllib.parse

Name = 'BagFullOfHoles' #Random player
Platform = 'xone'#pc, xbox, xone, ps4, ps3

url = 'http://api.bfhstats.com/api/playerInfo?plat=' + Platform + '&name=' + Name
json_obj = urllib.request.urlopen(url)
data = json.load(json_obj)
print (data)

TypeError:不能对类似于字节的对象使用字符串模式

最近刚用了2to3.py,当我试图修复它时,会出现这个错误或其他错误。有人有什么建议吗?在


Tags: nameimportapijsonobjurldataparse
2条回答

json_obj = urllib.request.urlopen(url)返回HTTPResponse对象。我们需要read()中的响应字节,然后decode()将这些字节转换为字符串,如下所示:

import json
import urllib.request, urllib.error, urllib.parse

Name = 'BagFullOfHoles' #Random player
Platform = 'xone'#pc, xbox, xone, ps4, ps3

url = 'http://api.bfhstats.com/api/playerInfo?plat=' + Platform + '&name=' + Name
json_obj = urllib.request.urlopen(url)
string = json_obj.read().decode('utf-8')
json_obj = json.loads(string)
print (json_obj)

您可能知道,Python3有单独的bytes和{}类型。从以二进制模式打开的文件中读取将返回bytes对象。在

json.load()函数只适用于以文本模式(与二进制模式相反)打开的文件(和类似文件的对象)。似乎urllib.request.urlopen()将返回一个类似于二进制模式的文件。在

与其使用json.load(),不如考虑从HTTPResponse对象读取并解码,然后传递给json.loads(),如下所示:

with urllib.request.urlopen(url) as f:
    json_str = f.read().decode()
obj = json.loads(json_str)

或者,您可能希望调查requests module。在

相关问题 更多 >

    热门问题