У меня вопрос, как работать с объектом 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...
Я на правильном пути?
Обратите внимание, что 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)
* 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)
* SOE: назначение на преподавательский состав UC в соответствии с рангом и должностью
обеспечение штатного доцента
Ха-ха, это было бы одновременно и самым большим, и самым маленьким рейзом!
Примечание для себя:
Частично эта проблема возникла в версии 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
будет работать нормально.
Самый полезный комментарий
Привет,
Пытаюсь отловить исключение:
Теперь я пытаюсь получить к нему доступ напрямую, и получаю следующую ошибку:
Как я могу поймать это конкретное исключение, а не только общее исключение githubexception?