왜 패키지의 소스 코드를 읽고 스스로 찾으십니까?
보자 ... client
객체를 가지고 있지만 browsing the source code 객체가 있다고 설명하지 않고 Client
클래스를 정의하는 "client.py"모듈이 있음을 알 수 있습니다. 이 클래스는 명시 적으로 put
방법을 정의하지 does'nt하지만 __getattr__
hook 정의
이
def __getattr__(self, name, **kwargs):
"""Translate an HTTP verb into a request method."""
if name not in ('get', 'post', 'put', 'head', 'delete'):
raise AttributeError
return partial(self._request, name, **kwargs)
좋아, 그래서 Client.put(...)
가 return self._request("put", **kwargs)
로 Client.put(**kwargs)
을 정의하는 아주 쓸데없이 복잡한 방법입니다 Client._request
를 감싸는 partial object을 반환합니다.
이제 Client._request
을 살펴 보겠습니다. 기본적으로 몇 가지 정상성 검사를하고 **kwargs
을 업데이트하고 wrapped_resource(make_request(method, url, kwargs))
을 반환합니다.
모듈 시작 부분에서 가져 오기를 조회하면 make_request
은 "request.py"에서 제공되고 wrapped_resource
은 "resources.py"에서 가져온 것을 볼 수 있습니다. 그래서이 가정 - 내가 (BTW 포스트 예외 역 추적 등의 문제에 대해 saking하십시오) "예외가 발생"뜻 가정 -
당신은 API 호출을 수행하면 속도 제한을 통해 "이 응용 프로그램을 충돌"하면서 언급 하위 레벨에서 처리되는 경우 request.make_request
부터 시작하겠습니다. 많은 데이터 서식 지정/마사지가 분명하고 마지막으로 the interesting part : response.raise_for_status()
을 호출합니다. (5XX이 클라이언트에 대한 requests.exceptions.HTTPError
(4XX) 및 서버를 제기한다 - 이것은 실제로 우리가 python-requests fine manual을 읽는다면, 우리는 raise_for_status
가 무엇을 발견 a few lines above 및 in the requirements file
를 확인 우리가 실제로 유명한 python-requests
package에 위임되는 힌트를,이다) 상태 코드.
이제는 예외가 무엇인지 알 수 있습니다. 귀하의 예외에 해당 정보가 모두 포함되어 있고 추적본이 있었으므로 귀하가 게시했을 때 많은 고통을 덜어 주셨을 것입니다.
하지만 어쨌든 ... 응답 내용을받지 못하는 것 같습니다. 그렇습니까? 잠깐, 아직 완료되지 않았습니다. 파이썬 요청은 상당히 잘 설계된 패키지이므로 여전히 응답을 구할 수 있습니다.실제로 requests.exceptions source code을 보면 HttpError
이 RequestException
의 하위 클래스이고 그 중 RequestException
이 "request
및 response
개 개체로 초기화 (d)"되어 있다는 것을 알 수 있습니다.
만세, 우리는 예외가 있습니다. 따라서 우리가해야 할 일은 예외를 잡아서 response
속성을 확인하는 것입니다.이 속성에는 "추가 정보"가 포함되어야합니다.
이제이 역 추적없이 분류하는 쓰기하지만, 약 7 분 나에게 절반 이상 시간이 걸렸다 양해 바랍니다 - 그것은 단순한 이분까지 삶은 것 역 추적과를, 시간 requests.exceptions 소스 코드로 이동하여 요청 및 응답을 유지했는지 확인하십시오. 좋아, 내가 속이고, 나는 소스 코드를 읽는 데 익숙해졌지만 파이썬 요청을 많이 사용한다. 그러나 여전히 : 파이썬의 대화 형 셸을 사용하여 한 시간도 채 안되어서 스스로 해결할 수 있었다. 실시간으로 개체를 살 수 있습니다.
바로'response.json()'에있었습니다. reset_time은'response.json() [ 'errors'] [0] [ 'release_at']'에 있습니다. 완전한 대답을 주셔서 감사합니다. –