Pygithub: Cómo trabajar con el objeto GithubException

Creado en 28 mar. 2013  ·  14Comentarios  ·  Fuente: PyGithub/PyGithub

Tengo una pregunta sobre cómo trabajar con el objeto GithubException

Código de muestra:
intentar:
equipo = org.create_team (nombreEquipo,
[],
"empujar");
excepto GithubException como e:
imprimir (e)

Cuando imprimo (e) obtengo:

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

Lo que me gustaría poder hacer es ver la lista de atributos y funciones miembro del objeto GithubException para poder extraer varias cosas para verificar eventos particulares ... pero no puedo encontrar esto en la documentación de la API de PyGithub. Tal vez solo necesito comprender mejor la relación entre la API de PyGithub y la API RESTful de github subyacente.

De la fuente, parece que hay dos propiedades del objeto GithubException:

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

data

y poniendo eso junto con la salida, parece que 422 es el estado (¿quizás devuelto por la API?), Y los datos son un objeto de diccionario (¿quizás una codificación del JSON que se devolvió?) pero estas son solo conjeturas.

Parece que el único lugar donde ocurre GithubException en la fuente es en Requester.py --- y esto tiende a confirmar mis conjeturas.

¿Hay algún lugar en la documentación de la API de github donde se pueden encontrar las claves que uno esperaría encontrar en el objeto JSON, es decir, en este caso, "mensaje", "errores", y luego dentro de "errores", "campo"? , "código", "y" recurso "?

De las conjeturas de prueba y error, me decidí por un código como este, pero esto se siente "hacky" --- Me sentiría más cómodo si supiera si lo estoy haciendo bien ...

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

¿Estoy en el camino correcto?

question

Comentario más útil

Hola,
Intento atrapar una excepción:

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

Ahora que intento acceder a él directamente, aparece el siguiente error:

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

¿Cómo puedo detectar esta excepción específica y no solo una githubexception general?

Todos 14 comentarios

Tenga en cuenta que User @ jacquev6 abordó parcialmente esto en un comentario sobre el problema # 82.

De hecho, este es el camino correcto. He aquí algunos comentarios.

Tiene razón sobre status y data : son el estado HTTP y la carga útil json decodificada. Lo hice de esta manera porque no tenía idea de los tipos de errores que podrían ocurrir, por lo que no pude crear propiedades específicas como en todas las demás clases en PyGithub. (Sé que un NamedUser siempre tiene un name , pero no existe tal conocimiento sobre excepciones / errores)

Entonces, cada vez que Github API v3 devuelve un estado HTTP por encima de 400, levanto un GithubException con este estado y la carga útil.

Al revisar la documentación de Github API v3 hoy, veo algunas palabras sobre errores: http://developer.github.com/v3/#client -errors pero de hecho hay más errores posibles. Por ejemplo, errores 404 para objetos no existentes, 401 para autenticación incorrecta, etc.

Entonces, lo que puedo hacer ahora que conozco un poco más los errores es crear subclases de GithubException y generarlas cuando veo un tipo específico de error. Esto permitiría al cliente except clases de error específicas y dejar que las otras clases suban por la pila.

Lo haré en la versión 1.14.0 y aprovecharé esto como una oportunidad para documentarlo en http://jacquev6.github.com/PyGithub/.

Lo haré en la sucursal topic/SpecificExceptions

Esto suena fantástico. Nuevamente, gracias por todo su arduo trabajo y
excelentes habilidades de diseño de software. El producto ha sido extraordinariamente
útil y fácil de entender --- y abordar esto lo hará incluso
mejor.

El jueves 28 de marzo de 2013 a las 12:59 p.m., Vincent Jacques
[email protected]ó :

Lo haré en el tema de la rama / SpecificExcept ionshttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

-
Responda a este correo electrónico directamente o véalo en Gi
.

Phill Conrad, profesor (SOE) *, Departamento de Ciencias de la Computación
Universidad de California, Santa Bárbara
Nombramiento conjunto: Facultad de estudios creativos (www.ccs.ucsb.edu)

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

* SOE: un nombramiento de facultad docente de la UC, correspondiente en rango y trabajo
seguridad a un profesor asociado titular

Gracias \ o / ¡Siempre es muy agradable escuchar a un cliente satisfecho!

Sí, creo que te daré un aumento --- el doble del salario que te estoy pagando
ahora. :-)

El jueves 28 de marzo de 2013 a las 13:33, Vincent Jacques
[email protected]ó :

Gracias \ o / ¡Siempre es muy agradable escuchar a un cliente satisfecho!

-
Responda a este correo electrónico directamente o véalo en Gi
.

Phill Conrad, profesor (SOE) *, Departamento de Ciencias de la Computación
Universidad de California, Santa Bárbara
Nombramiento conjunto: Facultad de estudios creativos (www.ccs.ucsb.edu)

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

* SOE: un nombramiento de facultad docente de la UC, correspondiente en rango y trabajo
seguridad a un profesor asociado titular

¡Huhu, ese sería mi aumento más grande y más pequeño!

Nota para mi:

  • Verifique la prueba github.tests.Organization.testMembers: hay un estado 403
  • Agregue un caso de prueba para una exn específica cuando una autenticación incorrecta con token

Parte de este problema se entregó en 1.14.0, pero lo conservo para la versión 1.15.0 para agregar algunos otros tipos de excepciones específicas.

Nueva excepción específica para crear: HTTP 403 "agente de usuario incorrecto" (consulte el n. ° 160)

Estoy cerrando este problema ahora, pero continuaré agregando tipos específicos de excepciones cuando los encuentre.

Hola,
Intento atrapar una excepción:

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

Ahora que intento acceder a él directamente, aparece el siguiente error:

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

¿Cómo puedo detectar esta excepción específica y no solo una githubexception general?

Hola,
Intento atrapar una excepción:

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

Ahora que intento acceder a él directamente, aparece el siguiente error:

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

¿Cómo puedo detectar esta excepción específica y no solo una githubexception general?

@NicoHood usa github.BadCredentialsException , que es más claro en el código fuente.

GithubException es una clase y también un módulo, la ruta completa del módulo a la clase es github.GithubException.GithubException, desde la cual no puede importar BadCredentialsException. Todas las excepciones se exportan a través de github, por lo que from github import BadCredentialsException funcionará bien.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

BBI-YggyKing picture BBI-YggyKing  ·  5Comentarios

kodeshpa picture kodeshpa  ·  3Comentarios

AdyaAbhra picture AdyaAbhra  ·  5Comentarios

diegotejadav picture diegotejadav  ·  5Comentarios

hsluoyz picture hsluoyz  ·  3Comentarios