Rob*_*inJ 112 python urllib2 attributeerror python-2.7 canonical-quickly
在Python中我收到一个错误:
Exception: (<type 'exceptions.AttributeError'>,
AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>)
Run Code Online (Sandbox Code Playgroud)
给出python代码:
def getEntries (self, sub):
url = 'http://www.reddit.com/'
if (sub != ''):
url += 'r/' + sub
request = urllib2.Request (url +
'.json', None, {'User-Agent' : 'Reddit desktop client by /user/RobinJ1995/'})
response = urllib2.urlopen (request)
jsonofabitch = response.read ()
return json.load (jsonofabitch)['data']['children']
Run Code Online (Sandbox Code Playgroud)
这个错误意味着什么,我做了什么导致它?
kos*_*sii 161
问题是json.load你应该传递一个像对象一样的文件,并read定义一个函数.所以要么你使用json.load(response)或json.loads(response.read()).
Kar*_*tel 12
AttributeError("'str' object has no attribute 'read'",)
Run Code Online (Sandbox Code Playgroud)
这意味着它所说的内容:某些东西试图.read在你给它的对象上找到一个属性,你给它一个类型的对象str(即,你给它一个字符串).
这里发生错误:
json.load (jsonofabitch)['data']['children']
Run Code Online (Sandbox Code Playgroud)
好吧,你不是在寻找read任何地方,所以它必须发生在json.load你调用的函数中(如完整的追溯所示).这是因为json.load试图.read,你给它的东西,但你给了它jsonofabitch,目前名称的字符串(通过调用创建.read的response).
解决方案:不要打电话给.read自己; 该函数将执行此操作,并期望您response直接提供它,以便它可以这样做.
您也可以通过阅读函数的内置Python文档(尝试help(json.load),或整个模块(尝试help(json)))或通过检查http://docs.python.org上的这些函数的文档来解决这个问题.
Eri*_*ski 12
如果你得到这样的python错误:
AttributeError: 'str' object has no attribute 'some_method'
Run Code Online (Sandbox Code Playgroud)
您可能通过用字符串覆盖对象而意外中毒了对象.
如何使用几行代码在python中重现此错误:
#!/usr/bin/env python
import json
def foobar(json):
msg = json.loads(json)
foobar('{"batman": "yes"}')
Run Code Online (Sandbox Code Playgroud)
运行它,打印:
AttributeError: 'str' object has no attribute 'loads'
Run Code Online (Sandbox Code Playgroud)
但是更改变量名的名称,它可以正常工作:
#!/usr/bin/env python
import json
def foobar(jsonstring):
msg = json.loads(jsonstring)
foobar('{"batman": "yes"}')
Run Code Online (Sandbox Code Playgroud)
当您尝试在字符串中运行方法时,会导致此错误.String有几个方法,但不是你要调用的方法.因此,请停止尝试调用String未定义的方法,并开始查找中毒对象的位置.
mus*_*ano 12
您需要先打开文件。这不起作用:
json_file = json.load('test.json')
Run Code Online (Sandbox Code Playgroud)
但这有效:
f = open('test.json')
json_file = json.load(f)
Run Code Online (Sandbox Code Playgroud)
小智 6
使用 json.loads() 而不是 json.load() ,它会起作用:例如:
import json
from json import dumps
strinjJson = '{"event_type": "affected_element_added"}'
data = json.loads(strinjJson)
print(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
200746 次 |
| 最近记录: |