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
属性,而你给它一个str
types的对象(也就是你给它一个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没有定义的方法,并开始寻找你的对象中毒的地方。