Pretende a saída de exceção do Python para torná -la legível. Instale com
python -m pip install pretty_errors
Se você deseja que pretty_errors
seja usado sempre que executar um script python, você deve adicioná -lo ao seu procedimento de inicialização do Python. Você pode fazer isso facilmente correndo:
python -m pretty_errors
Esta é a maneira recomendada de usar pretty_errors
; Além de ser mais simples e universal, usá -lo significará exceções SyntaxError
também será formatada (o que não funciona se você estiver importando manualmente pretty_errors
).
Se você não o instalou universalmente, pode usá -lo em seu projeto simplesmente importando -o:
import pretty_errors
Observe que você precisa estar em execução em um terminal capaz de saída de cores para obter saída de cores: no Windows, isso significa PowerShell, CMDER, etc. Se você precisar usar um terminal monocromático, poderá chamar a função auxiliar pretty_errors.mono()
, que definirá algumas opções de configuração de uma maneira útil para a saída monocromática.
Se você deseja configurar a saída, use pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
. Por exemplo:
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' )
Às vezes, será impossível para pretty_errors
utilizar sys.excepthook
: por exemplo, se você estiver usando uma estrutura que instala seu próprio registro (como uvicorn
). Nesses casos, você pode fazer com que pretty_errors
raspe a saída para stderr
, substituindo -o por si próprio. Para fazer isso simples chamada:
pretty_errors . replace_stderr ()
Observe que isso perderá alguma funcionalidade, pois pretty_errors
só terá acesso ao que está sendo emitido na tela, em vez de todo o rastreamento da pilha. Uma boa API geralmente terá uma maneira de interagir com a pilha de exceções, que permitirá o uso de excepthook
: replace_stderr
deve ser o último recurso. Veja este comentário para um exemplo
Você pode usar as funções whitelist(path)
e blacklist(path)
para adicionar caminhos que serão necessários ( whitelist
) ou excluídos ( blacklist
). O quadro superior da pilha nunca é excluído.
Você pode configurar configurações alternativas, que são acionadas pelo caminho para o arquivo de código do quadro. Por exemplo, se você não estivesse interessado nos quadros do sistema (aqueles sob 'c:/python'), mas não quisesse escondê -los completamente usando a blacklist
você poderia fazer isso:
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
definindo a variável de ambiente PYTHON_PRETTY_ERRORS
como 0
. ou seja, em um prompt de comando: set PYTHON_PRETTY_ERRORS=0
Chamar pretty_errors.activate()
substituirá isso.
Se você deseja utilizar seletivamente pretty_errors
, use o acima e, no seu código, execute seu cálculo para determinar se deve ou não chamar pretty_errors.activate()
.
pretty_errors
quando você estiver redirecionando a saída para um arquivo (para manter os logs de erros, por exemplo). Se você deseja fazer isso, definir PYTHON_PRETTY_ERRORS_ISATTY_ONLY
para muito zero fará com que pretty_errors
verifique se está em execução em um terminal interativo e apenas ativará se assim for. set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
Definir isso desabilitará replace_stderr()
nas mesmas situações, a menos que você o chame com o parâmetro force
: replace_stderr(force=True)
.
Chamar pretty_errors.activate()
substituirá isso.
Você pode verificar pretty_errors.terminal_is_interactive
para ver se o terminal é interativo ( pretty_errors
define isso verificando sys.stderr.isatty()
). Você pode usar isso para selecionar uma configuração diferente. Por exemplo:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
As definições de configuração são armazenadas em pretty_errors.config
, embora devam ser definidas usando pretty_errors.configure()
. Uma referência para a configuração padrão é armazenada em pretty_errors.default_config
.
name
Campo opcional para armazenar o nome da configuração.
line_length
A saída será embrulhada neste momento. Se definido como 0
(que é o padrão), ele corresponderá automaticamente à sua largura do console.
full_line_newline
Insira uma nova linha difícil, mesmo que a linha esteja cheia. Se line_length
for o mesmo que a largura do console e isso estiver ativado, você verá as linhas de novo dobro quando a linha estiver exatamente cheia, então geralmente você apenas o definiria se forem diferentes.
separator_character
Personagem usado para criar a linha do cabeçalho. O hífen é usado por padrão. Se definido como None
ou ''
, o cabeçalho será desativado.
display_timestamp
Quando ativado, um registro de data e hora é escrito no cabeçalho do Traceback.
timestamp_function
Função chamada para gerar registro de data e hora. O padrão é time.perf_counter
.
exception_above
Quando ativado, a exceção é exibida acima do rastreamento da pilha.
exception_below
Quando ativado, a exceção é exibida abaixo do rastreamento da pilha.
stack_depth
O número máximo de entradas do rastreamento da pilha para exibir. Quando 0
exibir a pilha inteira, que é o padrão.
top_first
Quando ativado, o rastreamento da pilha será revertido, exibindo a parte superior da pilha primeiro.
always_display_bottom
Quando ativado (que é o padrão), o quadro inferior do rastreamento da pilha sempre será exibido.
show_suppressed
Quando ativado, todas as exceções suprimidas no rastreamento da pilha serão mostradas (normalmente elas são suprimidas porque uma exceção acima deles os substituiu). O comportamento normal do Python é escondê -los.
filename_display
Como o nome do arquivo é exibido: pode ser pretty_errors.FILENAME_COMPACT
, pretty_errors.FILENAME_EXTENDED
, ou pretty_errors.FILENAME_FULL
line_number_first
Quando ativado, o número da linha será exibido primeiro, em vez do nome do arquivo.
display_link
Quando ativado, um link é escrito abaixo do local do erro, em que o VSCode permitirá que você clique.
lines_after
, lines_before
Quantas linhas de código a serem exibidas para o quadro superior, antes e depois da linha, a exceção ocorreu.
trace_lines_after
, trace_lines_before
Quantas linhas de código a serem exibidas para o outro em um rastreamento de pilha, antes e depois da linha, a exceção ocorreu.
truncate_code
Quando ativado, cada linha de código será truncada para caber no comprimento da linha.
display_locals
Quando ativado, as variáveis locais que aparecem no código do quadro da pilha superior serão exibidas com seus valores.
display_trace_locals
Quando ativado, as variáveis locais que aparecem em outro código do quadro da pilha serão exibidas com seus valores.
truncate_locals
Quando ativado, os valores das variáveis locais exibidos serão truncados para se ajustarem ao comprimento da linha.
display_arrow
Quando ativado, uma seta será exibida para erros de sintaxe, apontando para o token ofensivo.
arrow_head_character
, arrow_tail_character
Caracteres usados para desenhar a seta que aponta para erros de sintaxe.
inner_exception_message
Mensagem exibida quando uma exceção ocorre dentro de outra, entre as duas exceções. O padrão é None
, que simplesmente exibirá as exceções separadas pelo cabeçalho. Se você deseja imitar o comportamento não pretty padrão, use isso:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
Observe que, se você usar top_first
, o pedido será revertido, então você deve usar uma mensagem como esta:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
O padrão é False
. Quando definido como True
um cabeçalho será gravado antes do inner_exception_message
.
prefix
String de texto exibida na parte superior do relatório, logo abaixo do cabeçalho.
infix
String de texto exibida entre cada quadro da pilha.
postfix
String de texto exibida na parte inferior do relatório de exceção.
reset_stdout
Quando ativado, a sequência de escape de redefinição será gravada para stdout e stderr; Ative isso se o seu console estiver sendo deixado com a cor errada.
Essas seqüências de cores serão emitidas antes da parte relevante da mensagem de exceção. Você pode incluir seqüências de sequência não escape, se desejar; Se você não possui um terminal que suporta a saída de cores ou simplesmente deseja incluir demarcação extra.
header_color
Sequência de escape para definir a cor do cabeçalho.
timestamp_color
Sequência de escape para definir a cor do timestamp.
exception_color
Sequência de escape para definir a cor excepcional.
exception_arg_color
Escape sequência para definir a cor dos argumentos de exceção.
exception_file_color
Sequência de escape para definir a cor dos nomes de arquivos em exceções (por exemplo, em um FileNotFoundError).
filename_color
Escape sequência para definir a cor do nome do arquivo.
line_number_color
Sequência de escape para definir o número da linha cor.
function_color
Sequência de escape para definir a cor da função.
link_color
Sequência de escape para definir a cor do link.
line_color
Sequência de fuga para definir a cor da linha de código que causou a exceção.
code_color
Sequência de escape para definir a cor de outras linhas de código exibidas.
arrow_head_color
, arrow_tail_color
Sequência de escape para definir a cor da seta que aponta para erros de sintaxe.
syntax_error_color
Sequência de escape para definir a cor do token de erro de sintaxe.
local_name_color
Sequência de escape para definir a cor dos nomes de variáveis locais.
local_value_color
Sequência de fuga para definir a cor dos valores da variável local.
local_len_color
Sequência de escape para definir a cor do comprimento do valor local quando o local é truncado.
pretty_errors
tem algumas constantes de sequência de fuga incorporadas que você pode usar ao definir essas cores:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
Para cada cor, existe uma variante BRIGHT_
Comparation (ou seja, pretty_errors.BRIGHT_RED
), bem como uma variante _BACKGROUND
para definir a cor de fundo (ou seja, pretty_errors.RED_BACKGROUND
).
Por exemplo:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
Para a personalização mais extensa (com exceção de formar o pacote), você pode substituir a classe ExceptionWriter
padrão, permitindo que você adapte a saída como desejar. Normalmente, você só precisará substituir os métodos write_
.
Por exemplo:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
Execute help(pretty_errors.ExceptionWriter)
no intérprete Python para obter mais detalhes.