python - studio - Obtener seguimiento de las advertencias
microsoft visual studio descargar (2)
Ejecute su programa como
python -W error myprogram.py
Esto hace que todas las advertencias sean fatales, mira here para más información
En numpy podemos hacer np.seterr(invalid=''raise'')
para obtener un traceback para las advertencias que generan un error (ver esta publicación ).
- ¿Hay una manera general de rastrear las advertencias?
- ¿Puedo hacer que python proporcione un rastreo, cuando se genera una advertencia?
Puedes obtener lo que quieras asignando warnings.showwarning
. La documentación del módulo de advertencias en sí recomienda que lo haga, por lo que no es que esté siendo tentado por el lado oscuro de la fuente . :)
Puede reemplazar esta función con una implementación alternativa asignando
warnings.showwarning
.
Puede definir una nueva función que haga lo que hace normalmente warning.showwarning
y, además, imprime la pila. Luego lo coloca en lugar del original:
import traceback
import warnings
import sys
def warn_with_traceback(message, category, filename, lineno, file=None, line=None):
log = file if hasattr(file,''write'') else sys.stderr
traceback.print_stack(file=log)
log.write(warnings.formatwarning(message, category, filename, lineno, line))
warnings.showwarning = warn_with_traceback
Después de esto, cada advertencia imprimirá el seguimiento de la pila y el mensaje de advertencia. Tenga en cuenta, sin embargo, que si se ignora la advertencia porque no es la primera, no pasará nada, por lo que aún debe ejecutar:
warnings.simplefilter("always")
Puede obtener un control similar al que proporciona numpy.seterr
través de los filtros del módulo de warning
Si lo que desea es que python informe cada una de las advertencias cada vez que se active y no solo la primera vez, puede incluir algo como:
import warnings
warnings.simplefilter("always")
Puede obtener otros comportamientos pasando diferentes cadenas como argumentos. Usando la misma función, también puede especificar diferentes comportamientos para las advertencias dependiendo del módulo que las generó, el mensaje que proporcionan, la clase de advertencia, la línea de código que lo está causando y así sucesivamente ...
Puede consultar la lista en la documentación del módulo
Como ejemplo, puede establecer todas las advertencias para generar excepciones, excepto las Advertencias de DeprecationWarnings
que se deben ignorar por completo:
import warnings
warnings.simplefilter("error")
warnings.simplefilter("ignore", DeprecationWarning)
De esta forma, obtiene el rastreo completo para cada advertencia planteada como error (solo el primero, ya que la ejecución se detendrá ... pero puede abordarlos uno por uno, y crear un filtro para ignorar los que no desea escuchar de nuevo ...