Pygithub: Como trabalhar com o objeto GithubException

Criado em 28 mar. 2013  ·  14Comentários  ·  Fonte: PyGithub/PyGithub

Tenho uma pergunta sobre como trabalhar com o objeto GithubException

Código de amostra:
tentar:
equipe = org.create_team (teamName,
[],
"Empurre");
exceto GithubException como e:
imprimir (e)

Quando imprimo (e) recebo:

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

O que eu gostaria de poder fazer é ver a lista de atributos e funções-membro do objeto GithubException para que eu possa puxar várias coisas para verificar eventos específicos ... mas não consigo encontrar isso na documentação de a API PyGithub. Talvez eu só precise entender melhor a relação entre a API PyGithub e a API RESTful subjacente do github.

Pela fonte, parece que existem duas propriedades do objeto GithubException:

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

data

e colocando isso junto com a saída, parece que 422 é o status (talvez retornado pela API?) e os dados são um objeto de dicionário (talvez uma codificação do JSON que foi retornado?), mas esses são apenas suposições.

Parece que o único lugar que GithubException ocorre na fonte é Requester.py --- e isso tende a confirmar minhas suposições.

Existe algum lugar na documentação da própria API do github onde é possível encontrar as chaves que se esperaria encontrar no objeto JSON, ou seja, neste caso "mensagem", "erros" e, em seguida, em "erros", "campo" , "código", "e" recurso "?

A partir de suposições de tentativa e erro, me decidi por um código como este, mas parece "hackeado --- eu ficaria mais confortável se soubesse se estava fazendo isso da maneira certa ...

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

Estou no caminho certo?

question

Comentários muito úteis

Oi,
Tento pegar uma exceção:

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

Agora que tento acessá-lo diretamente, recebo o seguinte erro:

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

Como posso capturar essa exceção específica e não apenas uma githubexception geral?

Todos 14 comentários

Observe que o usuário @ jacquev6 abordou parcialmente isso em um comentário sobre o problema # 82.

Este é o caminho certo, de fato. Aqui estão algumas observações.

Você está certo sobre status e data : eles são o status HTTP e a carga útil json decodificada. Fiz isso dessa forma porque não tinha ideia dos tipos de erros que poderiam ocorrer, então não fui capaz de criar propriedades específicas como em todas as outras classes no PyGithub. (Eu sei que NamedUser sempre tem name , mas não existe tal conhecimento sobre exceções / erros)

Portanto, sempre que a API do Github v3 retorna um status HTTP acima de 400, eu aumento GithubException com esse status e a carga útil.

Verificando a documentação da API v3 do Github hoje, vejo algumas palavras sobre erros: http://developer.github.com/v3/#client -errors, mas na verdade há mais erros possíveis. Por exemplo, erros 404 para objetos não existentes, 401 para autenticação incorreta, etc.

Portanto, o que posso fazer agora que conheço um pouco mais os erros é criar subclasses de GithubException e aumentá-las quando vejo um tipo específico de erro. Isso permitiria ao cliente except classes de erro específicas e permitiria que as outras classes subissem na pilha.

Farei isso na versão 1.14.0 e aproveito a oportunidade para documentar em http://jacquev6.github.com/PyGithub/.

Farei isso na filial topic/SpecificExceptions

Isso parece ótimo. Mais uma vez, obrigado por todo o seu trabalho árduo e
excelentes habilidades de design de software. O produto foi extraordinariamente
útil e fácil de descobrir --- e lidar com isso tornará ainda mais
melhorar.

Em quinta-feira, 28 de março de 2013 às 12h59, Vincent Jacques
notificaçõ[email protected] :

Farei isso no branch topic / SpecificExcept ionshttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

Phill Conrad, conferencista (SOE) *, Departamento de Ciência da Computação
Universidade da Califórnia, Santa Bárbara
Nomeação conjunta: College of Creative Studies (www.ccs.ucsb.edu)

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

* SOE: uma nomeação para o corpo docente da UC, correspondendo em posição e cargo
segurança para um professor associado titular

Obrigado \ o / É sempre muito bom ouvir um cliente satisfeito!

Sim, acho que vou lhe dar um aumento --- o dobro do salário que estou pagando a você
agora. :-)

Em quinta-feira, 28 de março de 2013 às 13h33, Vincent Jacques
notificaçõ[email protected] :

Obrigado \ o / É sempre muito bom ouvir um cliente satisfeito!

-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

Phill Conrad, conferencista (SOE) *, Departamento de Ciência da Computação
Universidade da Califórnia, Santa Bárbara
Nomeação conjunta: College of Creative Studies (www.ccs.ucsb.edu)

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

* SOE: uma nomeação para o corpo docente da UC, correspondendo em posição e cargo
segurança para um professor associado titular

Huhu, esse seria meu maior e menor aumento de todos os tempos!

Nota para mim:

  • Verifique o teste github.tests.Organization.testMembers: há um status 403
  • Adicionar caso de teste para exn específico quando houver má autenticação com token

Parte desse problema foi entregue na 1.14.0, mas eu o mantenho na versão 1.15.0 para adicionar alguns outros tipos de exceção específicos.

Nova exceção específica para criar: HTTP 403 "mau agente do usuário" (consulte # 160)

Estou encerrando este problema agora, mas continuarei adicionando tipos específicos de exceção quando os encontrar.

Oi,
Tento pegar uma exceção:

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

Agora que tento acessá-lo diretamente, recebo o seguinte erro:

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

Como posso capturar essa exceção específica e não apenas uma githubexception geral?

Oi,
Tento pegar uma exceção:

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

Agora que tento acessá-lo diretamente, recebo o seguinte erro:

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

Como posso capturar essa exceção específica e não apenas uma githubexception geral?

@NicoHood use github.BadCredentialsException - que é mais claro no código-fonte.

GithubException é uma classe e também um módulo, o caminho completo do módulo para a classe é github.GithubException.GithubException, do qual você não pode importar BadCredentialsException. Todas as exceções são exportadas via github, então from github import BadCredentialsException funcionará bem.

Esta página foi útil?
0 / 5 - 0 avaliações