try:
something here
except:
print('the whatever error occurred.')
¿Cómo puedo imprimir el error / excepción en mi except:
bloque?
python
exception
error-handling
TIMEX
fuente
fuente
Respuestas:
Para Python 2.6 y posterior y Python 3.x:
Para Python 2.5 y anteriores, use:
fuente
str( KeyError('bad'))
=>'bad'
- no dice el tipo de excepciónprint(repr(e))
; laException.__str__
implementación base solo devuelve el mensaje de excepción, no el tipo. O utilice eltraceback
módulo, que tiene métodos para imprimir la excepción actual, formateada o el rastreo completo.El
traceback
módulo proporciona métodos para formatear e imprimir excepciones y sus trazas, por ejemplo, esto imprimiría una excepción como lo hace el controlador predeterminado:Salida:
fuente
error_message = traceback.format_exc()
except Exception as ex:
...sys.exc_info()
función y latraceback.print_exc()
función la obtiene desde allí. Solo necesita pasar una excepción explícitamente cuando no maneja una excepción o cuando desea mostrar información basada en una excepción diferente.En Python 2.6 o superior es un poco más limpio:
En versiones anteriores todavía es bastante legible:
fuente
En caso de que desee pasar cadenas de error, aquí hay un ejemplo de Errores y Excepciones (Python 2.6)
fuente
(Iba a dejar esto como un comentario sobre la respuesta de @ jldupont, pero no tengo suficiente reputación).
También he visto respuestas como la respuesta de @ jldupont en otros lugares. FWIW, creo que es importante tener en cuenta que esto:
imprimirá la salida de error
sys.stdout
por defecto. Un enfoque más apropiado para el manejo de errores en general sería:(Tenga en cuenta que tiene que hacerlo
import sys
para que esto funcione). De esta manera, el error se imprime enSTDERR
lugar deSTDOUT
, lo que permite el análisis / redirección de salida / etc. Entiendo que la pregunta era estrictamente sobre 'imprimir un error', pero parece importante señalar la mejor práctica aquí en lugar de omitir este detalle que podría conducir a un código no estándar para cualquiera que eventualmente no aprenda mejor.No he usado el
traceback
módulo como en la respuesta de Cat Plus Plus, y tal vez esa sea la mejor manera, pero pensé en lanzar esto.fuente
Python 3:
logging
En lugar de usar la
print()
función básica ,logging
se puede usar el módulo más flexible para registrar la excepción. Ellogging
módulo ofrece mucha funcionalidad adicional, por ejemplo, registrar mensajes en un archivo de registro dado, registrar mensajes con marcas de tiempo e información adicional sobre dónde ocurrió el registro. (Para obtener más información, consulte la documentación oficial ).El registro de una excepción se puede hacer con la función de nivel de módulo de la siguiente
logging.exception()
manera:Salida:
Notas:
la función
logging.exception()
solo debe llamarse desde un controlador de excepcionesel
logging
módulo no debe usarse dentro de un controlador de registro para evitar unRecursionError
(gracias @PrakharPandey)Niveles de registro alternativos
También es posible registrar la excepción con otro nivel de registro utilizando el argumento de palabra clave de la siguiente
exc_info=True
manera:fuente
Se puede generar un error de línea con declaraciones de afirmación si eso es lo que desea hacer. Esto lo ayudará a escribir código reparable estáticamente y a verificar los errores temprano.
fuente
Uno tiene bastante control sobre qué información del rastreo se mostrará / registrará al detectar excepciones.
El código
produciría el siguiente rastreo:
Imprimir / registrar el rastreo completo
Como otros ya mencionaron, puede atrapar todo el rastreo utilizando el módulo de rastreo:
Esto producirá el siguiente resultado:
Puede lograr lo mismo utilizando el registro:
Salida:
Nombre / mensaje de error de impresión / registro solamente
Es posible que no esté interesado en todo el rastreo, pero solo en la información más importante, como el nombre de excepción y el mensaje de excepción, use:
Salida:
fuente