visual studio microsoft guia espaƱol descargar community python warnings traceback

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 ...