Python;urllib 错误:AttributeError: 'bytes'对象没有 'read' 属性

58 投票
4 回答
215339 浏览
提问于 2025-04-16 20:37

注意:这是Python 3,里面没有urllib2这个模块。另外,我试过用json.loads(),但出现了这个错误:

TypeError: can't use a string pattern on a bytes-like object

如果我用json.loads()并且去掉response里的.read(),就会出现这个错误:

TypeError: expected string or buffer

>

import urllib.request
import json

response = urllib.request.urlopen('http://www.reddit.com/r/all/top/.json').read()
jsonResponse = json.load(response)

for child in jsonResponse['data']['children']:
    print (child['data']['title'])

这不管用……我也不知道为什么。

4 个回答

2

我对Python 3还不太熟悉,但看起来urllib.request.urlopen().read()返回的是一个byte对象,而不是字符串。

你可以试着把它放进一个StringIO对象里,或者直接用str(response)来转换一下。

46

使用 json.loads 而不是 json.load

(load 是从一个像文件一样的对象中读取数据,而 loads 是从字符串中读取数据。所以你也可以直接省略 .read() 这个调用。)

107

试试这个:

jsonResponse = json.loads(response.decode('utf-8'))

撰写回答