在Python中,我得到一个错误:
Exception: (<type 'exceptions.AttributeError'>,
AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>)
给定的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']
这个错误是什么意思?我是怎么造成的?
如果出现这样的python错误:
你可能是用一个字符串覆盖了你的对象,意外地毒害了你的对象。
如何用几行代码在python中重现此错误:
运行它,它将打印:
但是更改variablename的名称,它可以正常工作:
此错误是在尝试在字符串中运行方法时导致的。String有一些方法,但不是您要调用的方法。因此,停止尝试调用字符串未定义的方法,并开始寻找中毒对象的位置。
问题是,对于} 要么使用^{} 。
json.load
,应该传递一个定义了read
函数的类文件对象。所以要么使用^{这正是它所说的意思:某物试图在你给它的对象上找到一个
.read
属性,你给了它一个str
类型的对象(即,你给了它一个字符串)。此处发生错误:
好吧,您不需要在任何地方寻找
read
,所以它必须发生在您调用的json.load
函数中(如完整的回溯所示)。这是因为json.load
试图.read
你给它的东西,但是你给了它jsonofabitch
,它目前命名一个字符串(你通过在response
上调用.read
创建的)。解决方案:不要自己调用
.read
;函数会这样做,并希望您直接给它response
,以便它可以这样做。您还可以通过阅读函数(try
help(json.load)
)或整个模块(tryhelp(json)
)的内置Python文档,或者通过检查这些函数在http://docs.python.org上的文档来了解这一点。相关问题 更多 >
编程相关推荐