Pygithub: GithubExceptionオブジェクトを操作する方法

作成日 2013年03月28日  ·  14コメント  ·  ソース: PyGithub/PyGithub

GithubExceptionオブジェクトの操作方法について質問があります

サンプルコード:
試してください:
team = org.create_team(teamName、
[]、
"押す");
eとしてのGithubExceptionを除く:
印刷(e)

(e)を印刷すると、次のようになります。

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

私がやりたいのは、GithubExceptionオブジェクトの属性とメンバー関数のリストを表示して、特定のイベントをチェックするためにさまざまなものを引き出すことができるようにすることです...しかし、これはのドキュメントで見つけることができますPyGithubAPI。 たぶん、PyGithubAPIと基盤となるgithubRESTfulAPIの関係をよりよく理解する必要があります。

ソースから、GithubExceptionオブジェクトには2つのプロパティがあるようです。

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

data

それを出力と組み合わせると、422がステータス(おそらくAPIによって返される?)であり、データが辞書オブジェクト(おそらく返されるJSONのエンコーディング?)であるように見えますが、これらは推測にすぎません。

GithubExceptionがソースで発生する唯一の場所はRequester.pyにあるようです---これは私の推測を確認する傾向があります。

github API自体のドキュメントのどこかに、JSONオブジェクトで見つかると予想されるキーを見つけることができます。つまり、この場合は「メッセージ」、「エラー」、次に「エラー」、「フィールド」です。 、「コード」、「および「リソース」?

試行錯誤の推測から、このようなコードに落ち着きましたが、これは「ハッキー---これを正しく行っているかどうかを知っていればもっと快適だと思います...

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...

私は正しい方向に進んでいますか?

question

最も参考になるコメント

こんにちは、
私は例外をキャッチしようとします:

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

今、私はそれに直接アクセスしようとすると、次のエラーが発生します:

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

一般的なgithubexceptionだけでなく、この特定の例外をどのようにキャッチできますか?

全てのコメント14件

ユーザー@ jacquev6は、問題#82のコメントでこれに部分的に対処していることに注意してください。

これは確かに正しい道です。 ここにいくつかの意見があります。

あなたは正しいstatusdataです:それらはHTTPステータスとデコードされたjsonペイロードです。 発生する可能性のあるエラーの種類がわからなかったため、この方法でこれを行いました。そのため、PyGithubの他のすべてのクラスのように特定のプロパティを作成できませんでした。 ( NamedUser常にnameがあることは知っていますが、例外/エラーに関するそのような知識はありません)

そのため、Github API v3が400を超えるHTTPステータスを返すたびに、このステータスとペイロードでGithubExceptionを発生させます。

今日GithubAPI v3のドキュメントを確認すると、エラーについていくつかの単語があります: http: //developer.github.com/v3/#client -errorsですが、実際にはもっと多くのエラーが発生する可能性があります。 たとえば、存在しないオブジェクトの場合は404エラー、認証が正しくない場合は401などです。

したがって、エラーがもう少しわかったので、 GithubExceptionサブクラスを作成し、特定のタイプのエラーが発生したときにそれらを発生させることができます。 これにより、クライアントexcept特定のクラスのエラーを

私はバージョン1.14.0でそれを行い、これをhttp://jacquev6.github.com/PyGithub/で文書化する機会として利用します

これは素晴らしいですね。 繰り返しになりますが、皆さんの懸命な努力に感謝します。
優れたソフトウェア設計スキル。 製品は並外れて
便利で理解しやすい---そしてこれに対処することでそれが均一になります
より良い。

2013年3月28日木曜日12:59 PM、Vincent Jacques
[email protected]

ブランチトピック/SpecificExceptionshttps://github.com/jacquev6/PyGithub/tree/topic/SpecificExceptionsでそれを行います


このメールに直接返信するか、Gi tHubhttps://github.com/jacquev6/PyGithub/issues/152#issuecomment-15611026で表示してください

Phill Conrad、講師(SOE)*、コンピューターサイエンス学科
カリフォルニア大学サンタバーバラ校
共同任命:クリエイティブ・スタディーズ大学(www.ccs.ucsb.edu)

pconrad @ cs.ucsb.eduwww.cs.ucsb.edu / 〜pconrad

* SOE:ランクと職務に対応するUC教員の任命
テニュア准教授へのセキュリティ

ありがとう\ o /満足しているクライアントを耳にするのはいつもとてもいいことです!

はい、私はあなたに昇給するつもりだと思います---私があなたに支払っている給料の2倍
今。 :-)

2013年3月28日木曜日午後1時33分、Vincent Jacques
[email protected]

ありがとう\ o /満足しているクライアントを耳にするのはいつもとてもいいことです!


このメールに直接返信するか、Gi tHubhttps://github.com/jacquev6/PyGithub/issues/152#issuecomment-15612761で表示してください

Phill Conrad、講師(SOE)*、コンピューターサイエンス学科
カリフォルニア大学サンタバーバラ校
共同任命:クリエイティブ・スタディーズ大学(www.ccs.ucsb.edu)

pconrad @ cs.ucsb.eduwww.cs.ucsb.edu / 〜pconrad

* SOE:ランクと職務に対応するUC教員の任命
テニュア准教授へのセキュリティ

フフ、それは私の史上最大と最小の両方のレイズになるでしょう!

私自身への注意:

  • テストgithub.tests.Organization.testMembersを確認してください:403ステータスがあります
  • トークンで認証が悪い場合に特定のexnのテストケースを追加する

この問題の一部は1.14.0で配信されましたが、バージョン1.15.0でもそのままにして、他のいくつかの特定の例外タイプを追加します。

作成する新しい特定の例外:HTTP 403「不正なユーザーエージェント」(#160を参照)

現在、この問題を解決していますが、特定の種類の例外が発生した場合は、引き続き追加します。

こんにちは、
私は例外をキャッチしようとします:

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

今、私はそれに直接アクセスしようとすると、次のエラーが発生します:

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

一般的なgithubexceptionだけでなく、この特定の例外をどのようにキャッチできますか?

こんにちは、
私は例外をキャッチしようとします:

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

今、私はそれに直接アクセスしようとすると、次のエラーが発生します:

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

一般的なgithubexceptionだけでなく、この特定の例外をどのようにキャッチできますか?

@NicoHoodgithub.BadCredentialsException使用します-これはソースコードからより明確です。

GithubExceptionはクラスであると同時にモジュールでもあり、クラスへの完全なモジュールパスはgithub.GithubException.GithubExceptionであり、BadCredentialsExceptionをインポートすることはできません。 すべての例外はgithubを介してエクスポートされるため、 from github import BadCredentialsExceptionは正常に機能します。

このページは役に立ちましたか?
0 / 5 - 0 評価