Warum lesen Sie nicht den Quellcode des Pakets und finden es selbst heraus?
Mal sehen ... Sie nicht erklären bekommen, dass client
Objekt, sondern browsing the source code wir ein „client.py“ es gibt Modul, das eine Client
Klasse definiert sehen können. Diese Klasse does'nt keine put
Methode explizit definieren, aber es definiert die __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)
Ok, so gibt ein Client.put(...)
partial objectClient._request
Einwickeln, der ein ziemlich nutzlos gewundener Weg ist Client.put(**kwargs)
als return self._request("put", **kwargs)
zu definieren.
Nun schauen wir uns Client._request
an: es macht im Grunde ein paar Plausibilitätsprüfungen, aktualisiert **kwargs
und gibt wrapped_resource(make_request(method, url, kwargs))
zurück.
Wenn Sie die Importe am Anfang des Moduls nachschlagen, können Sie sehen, dass make_request
von "request.py" und wrapped_resource
von "resources.py" kommt.
Sie erwähnen, dass ein API-Aufruf zu tun, während sie über die Ratenbegrenzung „stürzt die Anwendung“ - ich nehme an, Sie bedeuten „löst eine Exception“ (BTW bitte Post Ausnahmen und Rückverfolgungen, wenn es um solche Probleme saking) - so unter der Annahme dieses Wird auf der unteren Ebene behandelt, beginnen wir mit request.make_request
. Eine Menge Daten Formatierung/Massieren natürlich und schließlich the interesting part: ein Anruf an response.raise_for_status()
. Dies ist ein Hinweis darauf, dass wir delegieren tatsächlich an den berühmten python-requests
package, die eigentlich a few lines above bestätigt und in the requirements file
Wenn wir python-requests fine manual lesen, finden wir heraus, was raise_for_status
tut - es hat eine requests.exceptions.HTTPError
für Client erhöht (4XX) und Server (5XX) Statuscodes.
Ok jetzt wissen wir, welche Ausnahme wir haben. Beachten Sie, dass Sie alle diese Informationen bereits in Ihrer Exception und Traceback hatten, was uns eine Menge Schmerzen erspart hätte, wenn Sie es gepostet hätten.
Aber wie auch immer ... Es sieht so aus, als würden wir den Antwort-Inhalt nicht bekommen, oder? Nun, warte, wir sind noch nicht fertig - Python-Anfragen sind ein ziemlich gut entworfenes Paket, also sind wir wahrscheinlich immer noch retten unsere Antwort.Und wenn wir requests.exceptions source code ansehen, finden wir heraus, dass HttpError
eine Unterklasse von RequestException
ist und dass RequestException
"Initialize (d)" mit "request
und response
Objekten" ist.
Hurra, wir haben unsere Antwort - in der Ausnahme. Alles, was wir tun müssen, ist die Exception zu fangen und das response
Attribut zu überprüfen - welches die "zusätzlichen Informationen" enthalten sollte.
Jetzt verstehen Sie bitte, dass diese mir mehr nahm als eine halbe Stunde zu Schreib, aber ca. 7 Minuten ausohne Zurückverfolgungs zu sortieren - mit dem Zurückverfolgungs hätte es auf nur 2 Minuten eingekocht, die Zeit um zum Quellcode von requests.exceptions zu gelangen und sicherzustellen, dass die Anfrage und die Antwort eingehalten wurden. Ok, ich betrüge, ich bin gewohnt, Quellcode zu lesen, und ich benutze Python-Anfragen viel, aber immer noch: Sie könnten dies in weniger als einer Stunde selbst gelöst haben, speziell mit Python's interaktiver Shell, die Sie erforschen und testen lassen Live-Objekte in Echtzeit.
es war genau dort in 'response.json()'; reset_time ist in 'response.json() ['errors'] [0] ['release_at']'. Danke für die vollständige Antwort. –