[python] AttributeError (“ ‘str’객체에는 ‘read’속성이 없습니다. ‘)

파이썬에서 오류가 발생합니다.

Exception:  (<type 'exceptions.AttributeError'>,
AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>)

주어진 파이썬 코드 :

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(response)하거나 json.loads(response.read()).


답변

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

이것은 정확히 그것이 말하는 것을 의미합니다 : 무언가 .read가 당신이 준 객체 에서 속성 을 찾으려고 시도했고 , 당신은 그것을 유형의 객체 str(즉, 당신에게 그것을 문자열로주었습니다)를주었습니다.

여기에서 오류가 발생했습니다 :

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

글쎄, 당신은 read아무 곳도 찾고 있지 않으므로 json.load호출 한 함수 에서 발생해야합니다 (전체 역 추적으로 표시). 때문이다 json.load하려고하고 .read당신이 그것을 준 것은, 그러나 당신은 그것을 준 jsonofabitch, 현재 어떤 이름 (당신이 호출하여 생성 된 문자열 .readresponse).

해결책 : .read직접 전화하지 마십시오 . 함수가이를 수행 response하며이를 수행 할 수 있도록 직접 제공해야합니다 .

함수에 대한 내장 Python 문서 (try help(json.load)또는 전체 모듈 (try help(json))) 를 읽 거나 http://docs.python.org 에서 해당 함수에 대한 문서를 확인하여 이를 파악할 수도 있습니다 .


답변

다음과 같은 파이썬 오류가 발생하는 경우 :

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

객체를 문자열로 덮어 써서 실수로 객체를 독살했을 수 있습니다.

몇 줄의 코드로 파이썬 에서이 오류를 재현하는 방법 :

#!/usr/bin/env python
import json
def foobar(json):
    msg = json.loads(json)

foobar('{"batman": "yes"}')

다음을 인쇄하십시오.

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

그러나 variablename의 이름을 변경하면 정상적으로 작동합니다.

#!/usr/bin/env python
import json
def foobar(jsonstring):
    msg = json.loads(jsonstring)

foobar('{"batman": "yes"}')

이 오류는 문자열 내에서 메소드를 실행하려고 할 때 발생합니다. 문자열에는 몇 가지 메소드가 있지만 호출하는 메소드는 없습니다. 따라서 String이 정의하지 않은 메소드를 호출하지 말고 객체를 중독시킨 곳을 찾으십시오.


답변

좋아, 이것은 오래된 실이지만. 나는 같은 문제를 겪었다. 나의 문제는 json.load대신에 사용 되었다.json.loads

이런 식으로 json은 모든 종류의 사전을로드하는 데 아무런 문제가 없습니다.

공식 문서

json.load-이 변환 표를 사용하여 fp (.read () 지원 텍스트 파일 또는 JSON 문서를 포함하는 이진 파일)를 Python 객체로 직렬화 해제합니다.

json.loads-이 변환 표를 사용하여 s (JSON 문서를 포함하는 str, bytes 또는 bytearray 인스턴스)를 Python 객체로 직렬화 해제합니다.


답변

먼저 파일을 열어야합니다. 작동하지 않습니다.

json_file = json.load('test.json')

그러나 이것은 작동합니다.

f = open('test.json')
json_file = json.load(f)


답변