Pygithub: Как работать с объектом GithubException

Созданный на 28 мар. 2013  ·  14Комментарии  ·  Источник: PyGithub/PyGithub

У меня вопрос, как работать с объектом GithubException

Образец кода:
пытаться:
team = org.create_team (teamName,
[],
"толкать");
кроме 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, чтобы я мог извлекать различные материалы для проверки конкретных событий ... но я не могу найти это в документации для API PyGithub. Возможно, мне просто нужно лучше понять взаимосвязь между PyGithub API и базовым Github RESTful API.

Из источника видно, что у объекта GithubException есть два свойства:

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 Комментарий

Обратите внимание, что User @ jacquev6 частично обратился к этому в комментарии к проблеме №82.

Это действительно правильный путь. Вот несколько замечаний.

Вы правы насчет status и data : это статус HTTP и декодированная полезная нагрузка json. Я сделал это таким образом, потому что понятия не имел о типах ошибок, которые могли произойти, поэтому я не мог создавать определенные свойства, как во всех других классах PyGithub. (Я знаю, что NamedUser всегда имеет name , но таких знаний об исключениях / ошибках нет)

Итак, всякий раз, когда Github API v3 возвращает HTTP-статус выше 400, я поднимаю GithubException с этим статусом и полезной нагрузкой.

Проверяя сегодня документацию по Github API v3, я вижу несколько слов об ошибках: http://developer.github.com/v3/#client -errors, но на самом деле возможных ошибок больше. Например, ошибка 404 для несуществующих объектов, 401 для неправильной аутентификации и т. Д.

Итак, что я могу сделать теперь, когда я немного больше знаю об ошибках, - это создать подклассы GithubException и вызывать их, когда я вижу ошибку определенного типа. Это позволит клиенту выявить определенные классы ошибок except и позволить другим классам подняться по стеку.

Я сделаю это в версии 1.14.0 и воспользуюсь возможностью задокументировать это в http://jacquev6.github.com/PyGithub/.

Я сделаю это в ветке topic/SpecificExceptions

Звучит потрясающе. Еще раз спасибо за вашу тяжелую работу, и
отличные навыки проектирования программного обеспечения. Продукт был необычайно
полезно и легко понять --- и устранение этого сделает его даже
лучше.

В чт, 28 марта 2013 г., 12:59, Винсент Жак
[email protected] написал :

Я сделаю это в теме ветки / SpecificExcept ionhttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

-
Ответьте на это письмо напрямую или просмотрите его на Gi tHub https://github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

Фил Конрад, преподаватель (SOE) *, кафедра компьютерных наук
Калифорнийский университет в Санта-Барбаре
Совместное назначение: Колледж творческих исследований (www.ccs.ucsb.edu)

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

* SOE: назначение на преподавательский состав UC в соответствии с рангом и должностью
обеспечение штатного доцента

Спасибо \ o / Всегда приятно слышать довольного клиента!

Да, я думаю, что дам тебе прибавку --- вдвое больше зарплаты, которую я тебе плачу
сейчас. :-)

В чт, 28 марта 2013 г., 13:33, Винсент Жак
[email protected] написал :

Спасибо \ o / Всегда приятно слышать довольного клиента!

-
Ответьте на это письмо напрямую или просмотрите его на Gi tHub https://github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

Фил Конрад, преподаватель (SOE) *, кафедра компьютерных наук
Калифорнийский университет в Санта-Барбаре
Совместное назначение: Колледж творческих исследований (www.ccs.ucsb.edu)

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

* SOE: назначение на преподавательский состав UC в соответствии с рангом и должностью
обеспечение штатного доцента

Ха-ха, это было бы одновременно и самым большим, и самым маленьким рейзом!

Примечание для себя:

  • Проверяем test 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?

@NicoHood использует github.BadCredentialsException - что более понятно из исходного кода.

GithubException - это класс, а также модуль, полный путь модуля к классу - github.GithubException.GithubException, из которого вы не можете импортировать BadCredentialsException. Все исключения экспортируются через github, поэтому from github import BadCredentialsException будет работать нормально.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги