Prettifies Python Exception Salida para que sea legible. Instalarlo con
python -m pip install pretty_errors
Si desea que se use pretty_errors
cada vez que ejecute un script de Python, debe agregarlo a su procedimiento de inicio de Python. Puedes hacerlo fácilmente ejecutando:
python -m pretty_errors
Esta es la forma recomendada de usar pretty_errors
; Además de ser más simple y universal, usarlo significará que las excepciones SyntaxError
también se formatean de manera brevemente (lo que no funciona si está importando manualmente pretty_errors
).
Si no lo ha instalado universalmente, puede usarlo en su proyecto simplemente importándolo:
import pretty_errors
Tenga en cuenta que debe ejecutar en un terminal capaz de salida de color para obtener la salida de color: en Windows esto significa PowerShell, CMDER, etc. Si debe usar un terminal monocromo, entonces puede llamar a la función de ayuda pretty_errors.mono()
,,,,,,,,,,), que establecerá algunas opciones de configuración de una manera que sea útil para la salida monocromática.
Si desea configurar la salida, use pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
. Por ejemplo:
import pretty_errors
pretty_errors . configure (
separator_character = '*' ,
filename_display = pretty_errors . FILENAME_EXTENDED ,
line_number_first = True ,
display_link = True ,
lines_before = 5 ,
lines_after = 2 ,
line_color = pretty_errors . RED + '> ' + pretty_errors . default_config . line_color ,
code_color = ' ' + pretty_errors . default_config . line_color ,
truncate_code = True ,
display_locals = True
)
pretty_errors . blacklist ( 'c:/python' )
A veces será imposible que pretty_errors
utilice sys.excepthook
: por ejemplo, si está utilizando un marco que instala su propio registro (como uvicorn
). En tales casos, puede hacer que pretty_errors
raspe la salida a stderr
en su lugar, reemplazándola por la suya. Para hacerlo, llame simple:
pretty_errors . replace_stderr ()
Tenga en cuenta que esto perderá alguna funcionalidad, ya que pretty_errors
solo tendrá acceso a lo que se está saliendo en la pantalla, en lugar de todo el rastro de la pila. Una buena API generalmente tendrá una forma de interactuar con la pila de excepciones, lo que permitirá usar excepthook
: replace_stderr
debería ser el último recurso. Vea este comentario para un ejemplo
Puede usar las funciones whitelist(path)
y blacklist(path)
para agregar rutas que serán necesarias ( whitelist
) o excluida ( blacklist
). El marco superior de la pila nunca se excluye.
Puede configurar configuraciones alternativas, que se activan por la ruta al archivo de código de la trama. Por ejemplo, si no estuviera interesado en los marcos del sistema (los que están bajo 'C:/Python') pero no quería ocultarlos por completo usando la blacklist
, podría hacer esto:
meh = pretty_errors . config . copy ()
meh . line_color = meh . code_color = meh . filename_color = meh . function_color = meh . line_number_color = (
pretty_errors . GREY
)
pretty_errors . pathed_config ( meh , 'c:/python' )
pretty_errors
estableciendo la variable de entorno PYTHON_PRETTY_ERRORS
en 0
. es decir, en un símbolo del sistema: set PYTHON_PRETTY_ERRORS=0
Llamar pretty_errors.activate()
anulará esto.
Si desea utilizar selectivamente pretty_errors
, use lo anterior y en su código realice su cálculo para determinar si llamar o no pretty_errors.activate()
.
pretty_errors
cuando está redirigiendo la salida a un archivo (para mantener registros de errores, por ejemplo). Si desea hacerlo, la configuración de PYTHON_PRETTY_ERRORS_ISATTY_ONLY
a distintas cero hará que pretty_errors
verifique si se está ejecutando en un terminal interactivo, y solo active si es así. set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
Configurar esto deshabilitará replace_stderr()
en las mismas situaciones, a menos que lo llame con el parámetro force
: replace_stderr(force=True)
.
Llamar pretty_errors.activate()
anulará esto.
Puede verificar pretty_errors.terminal_is_interactive
para ver si el terminal es interactivo ( pretty_errors
establece esto verificando sys.stderr.isatty()
). Puede usar esto para seleccionar una configuración diferente. Por ejemplo:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
Los ajustes de configuración se almacenan en pretty_errors.config
, aunque se debe configurar usando pretty_errors.configure()
. Una referencia para la configuración predeterminada se almacena en pretty_errors.default_config
.
name
Campo opcional para almacenar el nombre de configuración en.
line_length
La salida estará envuelta en este punto. Si se establece en 0
(que es el valor predeterminado), coincidirá automáticamente en el ancho de su consola.
full_line_newline
Inserte una nueva línea dura incluso si la línea está llena. Si line_length
es el mismo que el ancho de su consola y esto está habilitado, verá las dos nuevas líneas cuando la línea esté exactamente llena, por lo que generalmente solo establecería esto si son diferentes.
separator_character
El personaje utilizado para crear la línea de encabezado. El guión se usa de forma predeterminada. Si se establece en None
o ''
el encabezado se deshabilitará.
display_timestamp
Cuando se habilita, una marca de tiempo se escribe en el encabezado de traza.
timestamp_function
Función llamada para generar marca de tiempo. El valor predeterminado es time.perf_counter
.
exception_above
Cuando se habilita, la excepción se muestra sobre el rastro de la pila.
exception_below
Cuando se habilita, la excepción se muestra debajo del rastro de la pila.
stack_depth
El número máximo de entradas desde el rastro de la pila para mostrar. Cuando 0
mostrará la pila completa, que es el valor predeterminado.
top_first
Cuando se habilitó, se invertirá la traza de la pila, mostrando primero la parte superior de la pila.
always_display_bottom
Cuando esté habilitado (que es el predeterminado), siempre se mostrará la trama inferior de la traza de la pila.
show_suppressed
Cuando se habiliten, se mostrarán todas las excepciones suprimidas en la traza de la pila (generalmente se suprimen porque una excepción por encima de ellas las ha reemplazado). El comportamiento normal de Python es ocultarlos.
filename_display
Cómo se muestra el nombre de archivo: puede ser pretty_errors.FILENAME_COMPACT
, pretty_errors.FILENAME_EXTENDED
, o pretty_errors.FILENAME_FULL
line_number_first
Cuando se habilitó, el número de línea se mostrará primero, en lugar del nombre de archivo.
display_link
Cuando se habilitó, se escribe un enlace debajo de la ubicación de error, en qué VScode le permitirá hacer clic.
lines_after
, lines_before
En cuántas líneas de código se muestra para el cuadro superior, antes y después de la línea se produjo la excepción.
trace_lines_after
, trace_lines_before
¿Cuántas líneas de código se muestran para el marco de la otra en la traza de la pila, antes y después de la línea se produjo la excepción?
truncate_code
Cuando se habilitó, cada línea de código se truncará para que se ajuste a la longitud de la línea.
display_locals
Cuando cuando se habilitan, las variables locales que aparecen en el código de marco de pila superior se mostrarán con sus valores.
display_trace_locals
Cuando cuando se habilitan, las variables locales que aparecen en otro código de marco de pila se mostrarán con sus valores.
truncate_locals
Cuando se habilitan, los valores de las variables locales mostradas se truncarán para adaptarse a la longitud de la línea.
display_arrow
Cuando se habilitó, se mostrará una flecha para errores de sintaxis, apuntando al token ofensivo.
arrow_head_character
, arrow_tail_character
Los caracteres solían dibujar la flecha que apunta a los errores de sintaxis.
inner_exception_message
Mensaje que se muestra cuando se produce una excepción dentro de otra, entre las dos excepciones. El valor predeterminado es None
, que simplemente mostrará las excepciones separadas por el encabezado. Si desea emular el comportamiento no predeterminado predeterminado, use esto:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
Tenga en cuenta que si usa top_first
, el pedido se invertirá, por lo que debe usar un mensaje como este:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
El valor predeterminado es False
. Cuando se establece en True
se escribirá un encabezado antes del inner_exception_message
.
prefix
Cadena de texto que se muestra en la parte superior del informe, justo debajo del encabezado.
infix
Cadena de texto que se muestra entre cada cuadro de la pila.
postfix
Cadena de texto que se muestra en la parte inferior del informe de excepción.
reset_stdout
Cuando se habilitó, la secuencia de escape de reinicio se escribirá tanto en Stdout como a Stderr; Encienda esto si su consola se queda con el color incorrecto.
Estas cadenas de color se emitirán antes de la parte relevante del mensaje de excepción. Puede incluir cadenas de secuencia sin escapas si lo desea; Si no tiene un terminal que admite la salida de color, o simplemente desea incluir la demarcación adicional.
header_color
Secuencia de escape para establecer el color del encabezado.
timestamp_color
Secuencia de escape para establecer el color de la marca de tiempo.
exception_color
Secuencia de escape para establecer el color de excepción.
exception_arg_color
Secuencia de escape para establecer argumentos de excepción color.
exception_file_color
Sequencia de escape para establecer el color de los nombres de archivo en excepciones (por ejemplo, en un filenotfoundError).
filename_color
Secuencia de escape para establecer el color del nombre de archivo.
line_number_color
Secuencia de escape para establecer el color del número de línea.
function_color
Secuencia de escape para establecer el color de la función.
link_color
Secuencia de escape para establecer el color del enlace.
line_color
Secuencia de escape para establecer el color de la línea de código que causó la excepción.
code_color
Secuencia de escape para establecer el color de otras líneas de código mostradas.
arrow_head_color
, arrow_tail_color
Escapar secuencia para establecer el color de la flecha que apunta a los errores de sintaxis.
syntax_error_color
Secuencia de escape para establecer el color del token de error de sintaxis.
local_name_color
Secuencia de escape para establecer el color de los nombres de variables locales.
local_value_color
Secuencia de escape para establecer el color de los valores variables locales.
local_len_color
Secuencia de escape para establecer el color de la longitud del valor local cuando el local se trunca.
pretty_errors
tiene algunas constantes de secuencia de escape incorporadas que puede usar al configurar estos colores:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
Para cada color hay una variante BRIGHT_
coincidente (es decir, pretty_errors.BRIGHT_RED
), así como una variante _BACKGROUND
para establecer el color de fondo (es decir, pretty_errors.RED_BACKGROUND
).
Por ejemplo:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
Para la personalización más extensa (después de la bifurcación del paquete), puede anular la clase de ExceptionWriter
predeterminada, lo que le permite adaptar la salida, como desee. Por lo general, solo necesitará anular los métodos write_
.
Por ejemplo:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
Ejecutar help(pretty_errors.ExceptionWriter)
en el intérprete de Python para obtener más detalles.