AttributeError(“'str'对象没有属性'read'”)

在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'] 

这个错误是什么意思,我做了什么导致它?

问题是,对于json.load你应该传递一个类似定义了read函数的对象。 所以要么使用json.load(reponse)json.loads(response.read())

 AttributeError("'str' object has no attribute 'read'",) 

这意味着它正是这样说的:有些东西试图在你给它的对象上find一个.read属性,而你给它一个strtypes的对象(也就是你给它一个string)。

错误发生在这里:

 json.load (jsonofabitch)['data']['children'] 

那么,你不是在寻找任何地方的read ,所以它必须发生在你调用的json.load函数(如完整的回溯)。 这是因为json.load试图.read你给它的东西,但是你给了它jsonofabitch ,它当前命名一个string(你通过调用.read response创build的)。

解决方法:不要打电话.read自己。 该函数会做到这一点,并期待您直接给予response ,以便它可以这样做。

你也可以通过阅读函数的内置Python文档(尝试help(json.load)或者整个模块(尝试help(json) )或者通过检查http ://docs.python.org 。

如果你得到这样的python错误:

 AttributeError: 'str' object has no attribute 'some_method' 

你可能用一个string覆盖你的对象,意外中毒了你的对象。

如何在python中用几行代码重现这个错误:

 #!/usr/bin/env python import json def foobar(json): msg = json.loads(json) foobar('{"batman": "yes"}') 

运行它,打印:

 AttributeError: 'str' object has no attribute 'loads' 

但改变variables名的名称,它工作正常:

 #!/usr/bin/env python import json def foobar(jsonstring): msg = json.loads(jsonstring) foobar('{"batman": "yes"}') 

当您尝试在string中运行方法时,会导致此错误。 string有几个方法,但不是你正在调用的。 所以停止尝试调用一个String没有定义的方法,并开始寻找你的对象中毒的地方。