Prettifs Python -Ausnahmeausgabe, um es lesbar zu machen. Installieren Sie es mit
python -m pip install pretty_errors
Wenn Sie möchten, dass pretty_errors
immer dann verwendet werden, wenn Sie ein Python -Skript ausführen, müssen Sie es zu Ihrem Python -Startprozedur hinzufügen. Sie können dies einfach durch Laufen tun:
python -m pretty_errors
Dies ist die empfohlene Methode, um pretty_errors
zu verwenden. Abgesehen davon, dass es einfacher und universell ist, bedeutet dies, dass SyntaxError
-Ausnahmen auch hübsch formatiert werden (was nicht funktioniert, wenn Sie manuell pretty_errors
importieren).
Wenn Sie es nicht universell installiert haben, können Sie es in Ihrem Projekt einfach verwenden, indem Sie es importieren:
import pretty_errors
Beachten Sie, dass Sie in einem Terminal ausgeführt werden müssen, an dem Farbausgabe ausgeführt werden kann, um die Farbausgabe zu erhalten: In Windows bedeutet dies PowerShell, Cmder usw. Wenn Sie ein monochromes Terminal verwenden müssen, können Sie die Helferfunktion pretty_errors.mono()
nennen,. Dies setzt einige Konfigurationsoptionen auf eine Weise, die für die monochrome Ausgabe nützlich ist.
Wenn Sie die Ausgabe konfigurieren möchten, dann verwenden Sie pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
. Zum Beispiel:
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' )
Manchmal ist es für pretty_errors
nicht möglich, sys.excepthook
zu verwenden: Zum Beispiel, wenn Sie ein Framework verwenden, das seine eigene Protokollierung (wie uvicorn
) installiert. In solchen Fällen können Sie pretty_errors
stattdessen die Ausgabe an stderr
kratzen lassen und ihn durch seine eigenen ersetzen. Um so einfach zu tun, rufen Sie an:
pretty_errors . replace_stderr ()
Beachten Sie, dass dies einige Funktionen verliert, da pretty_errors
nur auf das auf dem Bildschirm ausgestrahlte Zugriff hat und dann die gesamte Stapelspur. Eine gute API hat im Allgemeinen eine Möglichkeit, mit dem Ausnahmestapel zu interagieren, mit replace_stderr
excepthook
verwendet werden kann. In diesem Kommentar finden Sie ein Beispiel
Sie können die Funktionen whitelist(path)
und blacklist(path)
verwenden, um Pfade hinzuzufügen, die erforderlich sind ( whitelist
) oder ausgeschlossen ( blacklist
). Der obere Rahmen des Stapels ist nie ausgeschlossen.
Sie können alternative Konfigurationen einrichten, die vom Pfad zur Codedatei des Frame ausgelöst werden. Wenn Sie beispielsweise nicht an den Systemrahmen interessiert waren (die unter 'C:/Python'), aber nicht mit der blacklist
vollständig ausblenden wollten, könnten Sie dies tun:
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
deaktivieren, indem Sie die Umgebungsvariable PYTHON_PRETTY_ERRORS
auf 0
einstellen. dh bei einer Eingabeaufforderung: set PYTHON_PRETTY_ERRORS=0
Das Aufrufen von pretty_errors.activate()
wird dies überschreiben.
Wenn Sie selektiv pretty_errors
verwenden möchten, verwenden Sie die oben genannten und führen Sie in Ihrem Code Ihre Berechnung durch, um festzustellen, ob sie pretty_errors.activate()
aufrufen oder nicht.
pretty_errors
zu deaktivieren, wenn Sie die Ausgabe in eine Datei umleiten (um beispielsweise Fehlerprotokolle zu führen). Wenn Sie dies möchten, bewirken Sie PYTHON_PRETTY_ERRORS_ISATTY_ONLY
in ungleich Null, dass pretty_errors
prüfen, ob es in einem interaktiven Terminal ausgeführt wird, und nur dann aktivieren, wenn ja. set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
Wenn Sie dies einstellen, deaktivieren Sie replace_stderr()
in denselben Situationen, es sei denn, Sie nennen es mit dem force
: replace_stderr(force=True)
.
Das Aufrufen von pretty_errors.activate()
wird dies überschreiben.
Sie können pretty_errors.terminal_is_interactive
überprüfen, um festzustellen, ob das Terminal interaktiv ist ( pretty_errors
setzt dies durch Überprüfen sys.stderr.isatty()
). Sie können diese verwenden, um eine andere Konfiguration auszuwählen. Zum Beispiel:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
Die Konfigurationseinstellungen werden in pretty_errors.config
gespeichert, sollten jedoch mit pretty_errors.configure()
festgelegt werden. Eine Referenz für die Standardkonfiguration wird in pretty_errors.default_config
gespeichert.
name
Optionales Feld zum Speichern des Konfigurationsnamens in.
line_length
Die Ausgabe wird an diesem Punkt eingewickelt. Wenn Sie auf 0
gesetzt sind (was die Standardeinstellung ist), stimmt es automatisch mit Ihrer Konsolenbreite überein.
full_line_newline
Fügen Sie eine harte neue Linie ein, auch wenn die Linie voll ist. Wenn line_length
die gleiche wie Ihre Konsolenbreite entspricht und dies aktiviert ist, sehen Sie doppelte Newlines, wenn die Linie genau voll ist. Normalerweise würden Sie dies nur festlegen, wenn sie unterschiedlich sind.
separator_character
Zeichen, das verwendet wird, um die Header -Linie zu erstellen. Hyphen wird standardmäßig verwendet. Wenn auf None
oder ''
festgelegt wird, wird der Header deaktiviert.
display_timestamp
Wenn ein Zeitstempel aktiviert ist, wird im Traceback -Header geschrieben.
timestamp_function
Funktion aufgerufen, um Zeitstempel zu generieren. Standard ist time.perf_counter
.
exception_above
Wenn aktiviert wird, wird die Ausnahme über der Stapelspur angezeigt.
exception_below
Wenn aktiviert wird, wird die Ausnahme unterhalb der Stapelspur angezeigt.
stack_depth
Die maximale Anzahl von Einträgen aus der Stapelspur, um anzuzeigen. Wenn 0
den gesamten Stapel anzeigt, ist die Standardeinstellung.
top_first
Wenn aktiviert wird, wird die Stapelverfolgung umgekehrt und zeigt zuerst die Oberseite des Stapels an.
always_display_bottom
Wenn es aktiviert ist (was der Standard ist), wird der untere Bild der Stapelverfolgung immer angezeigt.
show_suppressed
Wenn alle unterdrückten Ausnahmen in der Stapelspur aktiviert werden (normalerweise werden sie unterdrückt, da eine Ausnahme über ihnen sie ersetzt hat). Das normale Python -Verhalten ist es, sie zu verbergen.
filename_display
Wie der Dateiname angezeigt wird: Möglicherweise sind pretty_errors.FILENAME_COMPACT
, pretty_errors.FILENAME_EXTENDED
oder pretty_errors.FILENAME_FULL
line_number_first
Wenn aktiviert wird, wird die Zeilennummer zuerst und nicht der Dateiname angezeigt.
display_link
Wenn ein Link aktiviert ist, wird unter dem Fehlerspeicherort geschrieben, auf den Sie auf VSCODE klicken können.
lines_after
, lines_before
Wie viele Codezeilen für den oberen Rahmen vor und nach der Zeile angezeigt werden, wurde die Ausnahme aufgetreten.
trace_lines_after
, trace_lines_before
Wie viele Codezeilen füreinander in der Stapelspur angezeigt werden, bevor und nach der Leitung die Ausnahme aufgetreten ist.
truncate_code
Wenn jede Codezeile aktiviert wird, wird er für die Leitungslänge verkürzt.
display_locals
Wenn es aktiviert ist, werden lokale Variablen im oberen Stack -Frame -Code mit ihren Werten angezeigt.
display_trace_locals
Wenn es aktiviert ist, werden lokale Variablen, die in einem anderen Stack -Frame -Code angezeigt werden, mit ihren Werten angezeigt.
truncate_locals
Wenn aktiviert werden, werden die Werte der angezeigten lokalen Variablen für die Leitungslänge abgeschnitten.
display_arrow
Wenn aktiviert wird, wird ein Pfeil für Syntaxfehler angezeigt, wobei auf das beleidigende Token hinweist.
arrow_head_character
, arrow_tail_character
Zeichen, die zum Zeichnen des Pfeils verwendet werden, der auf Syntaxfehler verweist.
inner_exception_message
Meldung angezeigt, wenn eine Ausnahme in einer anderen zwischen den beiden Ausnahmen auftritt. Standard ist None
, die einfach die vom Header getrennten Ausnahmen anzeigt. Wenn Sie das nicht-fett-Verhalten des Standards emulieren möchten, verwenden Sie dies:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
Beachten Sie, dass die Bestellung umgekehrt wird, wenn Sie top_first
verwenden. Sie sollten also stattdessen eine Nachricht verwenden:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
Standard ist False
. Wenn ein Header vor der inner_exception_message
True
wird, wird ein Header geschrieben.
prefix
Textzeichenfolge, die oben im Bericht direkt unter dem Header angezeigt wird.
infix
Textzeichenfolge, die zwischen jedem Frame des Stapels angezeigt wird.
postfix
Textzeichenfolge, die am Ende des Ausnahmeberichts angezeigt wird.
reset_stdout
Wenn die Reset -Escape -Sequenz aktiviert ist, wird sowohl in STDOut als auch in STDERR geschrieben. Schalten Sie dies ein, wenn Ihre Konsole mit der falschen Farbe belassen wird.
Diese Farbketten werden vor dem relevanten Teil der Ausnahmenachricht ausgegeben. Sie können, wenn Sie möchten, nicht-Eskapen-Sequenzzeichenfolgen einbeziehen. Wenn Sie kein Terminal haben, das die Farbausgabe unterstützt oder einfach nur zusätzliche Abgrenzung einbeziehen möchte.
header_color
Escape -Sequenz, um die Headerfarbe zu setzen.
timestamp_color
Fluchtsequenz, um die Zeitstempelfarbe festzulegen.
exception_color
Escape -Sequenz, um die Ausnahmefarbe festzulegen.
exception_arg_color
Escape -Sequenz, um Ausnahmeargumente Farbe festzulegen.
exception_file_color
Escape -Sequenz, um die Farbe von Dateinamen in Ausnahmen festzulegen (z. B. in einem FilenotFoundError).
filename_color
Escape -Sequenz, um die Dateiname -Farbe festzulegen.
line_number_color
Escape -Sequenz, um die Zeilennummernfarbe festzulegen.
function_color
Escape -Sequenz, um die Funktion Farbe zu setzen.
link_color
Escape -Sequenz, um die Link -Farbe zu setzen.
line_color
Fluchtsequenz, um die Farbe der Codezeile festzulegen, die die Ausnahme verursachte.
code_color
Escape -Sequenz, um die Farbe anderer angezeigten Codezeilen festzulegen.
arrow_head_color
, arrow_tail_color
Fluchtsequenz, um die Farbe des Pfeils festzulegen, der bei Syntaxfehlern zeigt.
syntax_error_color
Escape -Sequenz, um die Farbe des Syntax -Fehlertokens festzulegen.
local_name_color
Escape -Sequenz, um die Farbe lokaler Variablennamen festzulegen.
local_value_color
Escape -Sequenz, um die Farbe lokaler variabler Werte festzulegen.
local_len_color
Escape -Sequenz, um die Farbe der lokalen Wertlänge festzulegen, wenn lokal abgeschnitten wird.
pretty_errors
hat einige in Escape -Sequenzkonstanten eingebaute Konstanten, die Sie beim Festlegen dieser Farben verwenden können:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
Für jede Farbe gibt es eine passende BRIGHT_
-Variante (dh pretty_errors.BRIGHT_RED
) sowie eine _BACKGROUND
-Variante, um die Hintergrundfarbe (dh pretty_errors.RED_BACKGROUND
) festzulegen.
Zum Beispiel:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
Für die umfangreichste Anpassung (kurz vor dem Abgabering des Pakets) können Sie die Standard ExceptionWriter
überschreiben, sodass Sie die Ausgabe anpassen können, wie Sie möchten. Normalerweise müssen Sie die write_
-Methoden nur überschreiben.
Zum Beispiel:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
Run help(pretty_errors.ExceptionWriter)
im Python -Interpreter für weitere Details.