Comprobando el error de tiempo de espera en python

Así que tengo una statement de registro bastante genérica después de una solicitud:

try: r = requests.get(testUrl, timeout=10.0) except Exception, err: logger.error({"message": err.message}) 

Esto funciona muy bien para todo lo que le he lanzado, excepto TimeoutError . Cuando la solicitud supera el error, vuelvo es una tupla que intenta y no puede serializar.

Mi pregunta es ¿cómo detecto solo este tipo de error? Para empezar, TimeoutError no es algo a lo que tenga acceso. He intentado agregar from exceptions import * pero sin suerte. También he intentado importar OSError porque los documentos dicen que TimeoutError es una subclase, pero no TimeoutError acceder a TimeoutError después de importar OSError .

TimeoutError docs

Tengo la intención de enumerar mis excepciones en orden:

 except TimeoutError, err: #handle this specific error except Exception, err: #handle all other errors 

o simplemente compruebe el tipo:

 except Exception, err: if isinstance(err, TimeoutError): #handle specific error #handle all other errors 

Python 2.7.3 y Django 1.5

Puede manejar requests.Timeout Excepción de tiempo:

 try: r = requests.get(testUrl, timeout=10.0) except requests.Timeout as err: logger.error({"message": err.message}) except requests.RequestException as err: # handle other errors 

Ejemplo:

 >>> import requests >>> url = "http://httpbin.org/delay/2" >>> try: ... r = requests.get(url, timeout=1) ... except requests.Timeout as err: ... print(err.message) ... HTTPConnectionPool(host='httpbin.org', port=80): Read timed out. (read timeout=1)