Pygithub: So arbeiten Sie mit dem GithubException-Objekt

Erstellt am 28. März 2013  ·  14Kommentare  ·  Quelle: PyGithub/PyGithub

Ich habe eine Frage zur Arbeit mit dem GithubException-Objekt

Beispielcode:
Versuchen:
team = org.create_team (teamName,
[],
"drücken");
außer GithubException als e:
drucken (e)

Wenn ich (e) drucke, bekomme ich:

 422 {u'message': u'Validation Failed', u'errors': [{u'field': u'name', u'code': u'already_exists', u'resource': u'Team'}]}

Ich möchte in der Lage sein, die Liste der Attribute und Elementfunktionen des GithubException-Objekts anzuzeigen, damit ich verschiedene Dinge herausziehen kann, um nach bestimmten Ereignissen zu suchen ... aber ich kann dies nicht in der Dokumentation für finden die PyGithub-API. Vielleicht muss ich nur die Beziehung zwischen der PyGithub-API und der zugrunde liegenden Github-RESTful-API besser verstehen.

Aus der Quelle geht hervor, dass das GithubException-Objekt zwei Eigenschaften aufweist:

https://github.com/jacquev6/PyGithub/blob/master/github/GithubException.py

data

Zusammen mit der Ausgabe scheint es, dass 422 der Status ist (möglicherweise von der API zurückgegeben?) und die Daten ein Wörterbuchobjekt sind (möglicherweise eine Codierung des zurückgegebenen JSON?), aber dies sind nur Vermutungen.

Es scheint, dass der einzige Ort, an dem GithubException in der Quelle auftritt, Requester.py --- ist, und dies bestätigt meine Vermutungen.

Gibt es irgendwo in der Dokumentation für die Github-API selbst, wo man die Schlüssel finden kann, die man im JSON-Objekt erwarten würde, dh in diesem Fall "Nachricht", "Fehler" und dann in "Fehler", "Feld" , "Code", "und" Ressource "?

Nach Versuch und Irrtum habe ich mich für Code wie diesen entschieden, aber das fühlt sich "hackig" an. Ich würde mich wohler fühlen, wenn ich wüsste, ob ich das richtig mache ...

team = False   # Sentinel to see if it succeeded or failed
try:
   team = org.create_team(teamName,
                     [],
                     "push");
   print(" team {0} created...".format(teamName),end='')
except GithubException as e:
   if (e.data['errors'][0]['code']=='already_exists'):
      print(" team {0} already exists...".format(teamName),end='') 
   else:
      print (e)

if (team != False):
   # do something with team...

Bin ich auf dem richtigen Weg?

question

Hilfreichster Kommentar

Hallo,
Ich versuche eine Ausnahme zu fangen:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Jetzt versuche ich direkt darauf zuzugreifen. Ich erhalte die folgende Fehlermeldung:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Wie kann ich diese spezielle Ausnahme und nicht nur eine allgemeine Githube-Ausnahme abfangen?

Alle 14 Kommentare

Beachten Sie, dass User @ jacquev6 dies teilweise in einem Kommentar zu Problem Nr. 82 angesprochen hat.

Dies ist in der Tat der richtige Weg. Hier einige Anmerkungen.

Sie haben Recht mit status und data : Dies sind der HTTP-Status und die dekodierte JSON-Nutzlast. Ich habe dies auf diese Weise getan, weil ich keine Ahnung hatte, welche Arten von Fehlern auftreten könnten, sodass ich nicht wie in allen anderen Klassen in PyGithub bestimmte Eigenschaften erstellen konnte. (Ich weiß, dass ein NamedUser immer ein name , aber es gibt kein solches Wissen über Ausnahmen / Fehler)

Wenn also die Github-API v3 einen HTTP-Status über 400 zurückgibt, erhöhe ich mit diesem Status und der Nutzlast einen GithubException .

Wenn ich heute die Dokumentation zur Github API v3 überprüfe, sehe ich einige Worte zu Fehlern: http://developer.github.com/v3/#client -errors, aber tatsächlich gibt es mehr mögliche Fehler. Zum Beispiel 404 Fehler für nicht vorhandene Objekte, 401 für schlechte Authentifizierung usw.

Was ich jetzt tun kann, da ich die Fehler ein bisschen besser kenne, ist, Unterklassen von GithubException zu erstellen und sie zu erhöhen, wenn ich einen bestimmten Fehlertyp sehe. Dies würde es dem Client ermöglichen, except bestimmte Fehlerklassen zu verwenden und die anderen Klassen den Stapel hochgehen zu lassen.

Ich werde dies in Version 1.14.0 tun und dies als Gelegenheit nutzen, um es in http://jacquev6.github.com/PyGithub/ zu dokumentieren

Ich werde das in Zweig topic/SpecificExceptions tun

Das klingt großartig. Nochmals vielen Dank für all Ihre harte Arbeit und
ausgezeichnete Software-Design-Fähigkeiten. Das Produkt war außergewöhnlich
nützlich und leicht herauszufinden --- und wenn Sie dies ansprechen, wird es gleichmäßig
besser.

Am Do, 28. März 2013 um 12:59 Uhr, Vincent Jacques
[email protected] schrieb :

Ich werde das in Branchenthema / SpecificExcept ionhttps tun: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

- -
Antworten Sie direkt auf diese E-Mail oder sehen Sie sie sich auf Gi tHubhttps an: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

Phill Conrad, Dozent (SOE) *, Fakultät für Informatik
Universität von Kalifornien, Santa Barbara
Gemeinsame Ernennung: College of Creative Studies (www.ccs.ucsb.edu)

[email protected] , www.cs.ucsb.edu/~pconrad

* SOE: ein Termin an einer UC-Lehrfakultät, der in Rang und Beruf entspricht
Sicherheit für einen fest angestellten außerordentlichen Professor

Danke \ o / Es ist immer sehr schön, einen zufriedenen Kunden zu hören!

Ja, ich denke, ich werde dir eine Gehaltserhöhung geben - das Doppelte des Gehalts, das ich dir zahle
jetzt. :-)

Am Do, 28. März 2013 um 13:33 Uhr, Vincent Jacques
[email protected] schrieb :

Danke \ o / Es ist immer sehr schön, einen zufriedenen Kunden zu hören!

- -
Antworten Sie direkt auf diese E-Mail oder sehen Sie sie sich auf Gi tHubhttps an: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

Phill Conrad, Dozent (SOE) *, Fakultät für Informatik
Universität von Kalifornien, Santa Barbara
Gemeinsame Ernennung: College of Creative Studies (www.ccs.ucsb.edu)

[email protected] , www.cs.ucsb.edu/~pconrad

* SOE: ein Termin an einer UC-Lehrfakultät, der in Rang und Beruf entspricht
Sicherheit für einen fest angestellten außerordentlichen Professor

Huhu, das wäre sowohl meine größte als auch meine kleinste Erhöhung überhaupt!

Notiz an mich:

  • Überprüfen Sie test github.tests.Organization.testMembers: Es gibt einen 403-Status
  • Fügen Sie einen Testfall für eine bestimmte exn hinzu, wenn die Authentifizierung mit dem Token fehlerhaft ist

Ein Teil dieses Problems wurde in 1.14.0 ausgeliefert, aber ich behalte es für Version 1.15.0, um einige andere spezifische Ausnahmetypen hinzuzufügen.

Neue spezifische Ausnahme zum Erstellen: HTTP 403 "Bad User Agent" (siehe # 160)

Ich schließe dieses Problem jetzt, werde aber weiterhin bestimmte Arten von Ausnahmen hinzufügen, wenn ich auf sie stoße.

Hallo,
Ich versuche eine Ausnahme zu fangen:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Jetzt versuche ich direkt darauf zuzugreifen. Ich erhalte die folgende Fehlermeldung:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Wie kann ich diese spezielle Ausnahme und nicht nur eine allgemeine Githube-Ausnahme abfangen?

Hallo,
Ich versuche eine Ausnahme zu fangen:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Jetzt versuche ich direkt darauf zuzugreifen. Ich erhalte die folgende Fehlermeldung:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Wie kann ich diese spezielle Ausnahme und nicht nur eine allgemeine Githube-Ausnahme abfangen?

@NicoHood benutze github.BadCredentialsException - was aus dem Quellcode klarer wird.

GithubException ist sowohl eine Klasse als auch ein Modul. Der vollständige Modulpfad zur Klasse lautet github.GithubException.GithubException, aus der Sie BadCredentialsException nicht importieren können. Alle Ausnahmen werden über Github exportiert, sodass from github import BadCredentialsException einwandfrei funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen