Tenemos el arreglo a esta preocupación, al menos eso creemos. Si presentas inquietudes puedes escribirlo en el apartado de comentarios, que sin dudarlo te ayudaremos
Solución:
Creo que puedes acceder usando e.args[0].reason.errno
.
Esto probablemente esté documentado en alguna parte, pero generalmente cuando tengo que rastrear algo como esto, simplemente lo pruebo en la consola y busco un poco. (Uso IPython, por lo que es fácil hacer una inspección de pestañas, pero intentémoslo sin ella).
Primero, generemos un error usando
import requests
try:
requests.get("http://not.a.real.url/really_not")
except requests.exceptions.ConnectionError as e:
pass
que nos debe dar el error en e
:
>>> e
ConnectionError(MaxRetryError("HTTPConnectionPool(host='not.a.real.url', port=80): Max retries exceeded with url: /really_not (Caused by : [Errno -2] Name or service not known)",),)
La información suele estar en args
:
>>> e.args
(MaxRetryError("HTTPConnectionPool(host='not.a.real.url', port=80): Max retries exceeded with url: /really_not (Caused by : [Errno -2] Name or service not known)",),)
>>> e.args[0]
MaxRetryError("HTTPConnectionPool(host='not.a.real.url', port=80): Max retries exceeded with url: /really_not (Caused by : [Errno -2] Name or service not known)",)
Mirando hacia adentro, vemos:
>>> dir(e.args[0])
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__getitem__', '__getslice__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__',
'__str__', '__subclasshook__', '__unicode__', '__weakref__', 'args', 'message', 'pool',
'reason', 'url']
reason
parece alentador:
>>> e.args[0].reason
gaierror(-2, 'Name or service not known')
>>> dir(e.args[0].reason)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__getitem__', '__getslice__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__',
'__str__', '__subclasshook__', '__unicode__', '__weakref__', 'args', 'errno', 'filename',
'message', 'strerror']
>>> e.args[0].reason.errno
-2
Si conservas algún recelo o forma de refinar nuestro división eres capaz de ejecutar una apostilla y con gusto lo estudiaremos.