Obtenir Errno à partir de Python Demandes ConnectionError?
Je suis de capture et d'impression Python Demandes ConnectionErrors fine avec seulement ceci:
except requests.exceptions.ConnectionError as e:
logger.warning(str(e.message))
Il imprime des messages tels que:
HTTPSConnectionPool(host='10.100.24.16', port=443): Max retries exceeded with url: /api/datastores/06651841-bbdb-472a-bde2-689d8cb8da19 (Caused by <class 'socket.error'>: [Errno 61] Connection refused)
et
HTTPSConnectionPool(host='10.100.24.16', port=443): Max retries exceeded with url: /api/datastores/06651841-bbdb-472a-bde2-689d8cb8da19 (Caused by <class 'socket.error'>: [Errno 65] No route to host)
Et beaucoup d'autres. Ce que je me demande, quel est le meilleur, le plus Pythonic, de façon à obtenir que errno qui est l'affichage dans le message? J'aimerais disposer d'un système fiable pour attraper les questions et en offrant comme utiles et pertinentes message d'erreur à l'utilisateur que possible. Aussi loin que je peux dire, ConnectionError est une indirecte défunte de BaseException, sans de nouvelles propriétés ou méthodes ajoutées au-delà de ce que BaseException offre. J'hésite à utiliser les regex, car il me semble que je courir le risque d'en supposant que tous les messages d'erreur sont formatés de la même manière dans toutes les localités.
OriginalL'auteur ArtOfWarfare | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez y accéder à l'aide
e.args[0].reason.errno
.C'est probablement documenté quelque part, mais en général, quand j'ai la trace de quelque chose comme ce que je viens juste de l'essayer à la console et de creuser autour de un peu. (J'utilise IPython il est donc facile de faire de l'onglet d'inspection, mais nous allons essayer sans).
Tout d'abord, nous allons générer une erreur à l'aide de
qui devrait nous donner l'erreur dans
e
:De l'Information est généralement dans
args
:Regarder à l'intérieur, nous voyons:
reason
paraît encourageante:L'utilisation d'une fausse URL a été aussi une belle touche pour générer des erreurs. J'avais été en utilisant réel Url mais avec mon internet d'arrêt... il n'était pas pratique d'avoir à faire des allers-retours entre génère les erreurs et faire des recherches.
oh mon seigneur - merci merci - cette erreur a été de me conduire batty!
OriginalL'auteur DSM