Puttifie la sortie de l'exception Python pour la rendre lisible. L'installer avec
python -m pip install pretty_errors
Si vous voulez que pretty_errors
soit utilisé chaque fois que vous exécutez un script Python, vous devez l'ajouter à votre procédure de démarrage Python. Vous pouvez faire si facilement en coulant:
python -m pretty_errors
C'est la façon recommandée d'utiliser pretty_errors
; En plus d'être plus simple et universel, l'utilisation signifie que les exceptions SyntaxError
seront également formatées (ce qui ne fonctionne pas si vous importez manuellement pretty_errors
).
Si vous ne l'avez pas installé universellement, vous pouvez l'utiliser dans votre projet simplement en l'important:
import pretty_errors
Remarque Vous devez être exécuté dans un terminal capable de sortie de couleur afin d'obtenir la sortie de la couleur: dans Windows, cela signifie PowerShell, CMder, etc. Si vous devez utiliser un terminal monochrome, vous pouvez appeler la fonction d'assistance pretty_errors.mono()
, qui définira certaines options de configuration d'une manière utile pour la sortie monochrome.
Si vous souhaitez configurer la sortie, utilisez pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
. Par exemple:
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' )
Parfois, il sera impossible pour pretty_errors
d'utiliser sys.excepthook
: par exemple, si vous utilisez un framework qui installe sa propre journalisation (comme uvicorn
). Dans de tels cas, vous pouvez faire en sorte que pretty_errors
gratte la sortie vers stderr
à la place, en le remplaçant par le sien. Pour faire un appel simple:
pretty_errors . replace_stderr ()
Notez que cela perdra certaines fonctionnalités, car pretty_errors
n'aura accès qu'à ce qui est sorti à l'écran, plutôt qu'à l'ensemble de la trace de pile. Une bonne API aura généralement un moyen d'interagir avec la pile d'exception, ce qui permettra d'utiliser excepthook
: replace_stderr
devrait être le dernier recours. Voir ce commentaire pour un exemple
Vous pouvez utiliser la whitelist(path)
et blacklist(path)
des fonctions pour ajouter des chemins qui seront nécessaires ( whitelist
) ou exclus ( blacklist
). Le cadre supérieur de la pile n'est jamais exclu.
Vous pouvez configurer d'autres configurations, qui sont déclenchées par le chemin d'accès au fichier de code de la trame. Par exemple, si vous n'étiez pas intéressé par les cadres système (ceux sous «c: / python») mais que vous ne vouliez pas les cacher complètement en utilisant la blacklist
que vous pourriez faire ceci:
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
en définissant la variable d'environnement PYTHON_PRETTY_ERRORS
sur 0
. c'est-à-dire à une invite de commande: set PYTHON_PRETTY_ERRORS=0
Appeler pretty_errors.activate()
le remplacera.
Si vous souhaitez utiliser de manière sélective pretty_errors
, utilisez ce qui précède, et dans votre code, effectuez votre calcul pour déterminer s'il faut appeler pretty_errors.activate()
.
pretty_errors
lorsque vous redirigez la sortie vers un fichier (pour tenir des journaux d'erreur, par exemple). Si vous souhaitez le faire, la définition PYTHON_PRETTY_ERRORS_ISATTY_ONLY
à non-zéro entraînera une vérification de pretty_errors
si elle s'exécute dans un terminal interactif et ne s'active que si c'est le cas. set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
Le réglage désactivera replace_stderr()
dans les mêmes situations, sauf si vous l'appelez avec le paramètre force
: replace_stderr(force=True)
.
Appeler pretty_errors.activate()
le remplacera.
Vous pouvez vérifier pretty_errors.terminal_is_interactive
pour voir si le terminal est interactif ( pretty_errors
le définit en vérifiant sys.stderr.isatty()
). Vous pouvez l'utiliser pour sélectionner une configuration différente. Par exemple:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
Les paramètres de configuration sont stockés dans pretty_errors.config
, mais devraient être définis à l'aide de pretty_errors.configure()
. Une référence pour la configuration par défaut est stockée dans pretty_errors.default_config
.
name
Champ facultatif pour stocker le nom de configuration en.
line_length
La sortie sera enveloppée à ce stade. S'il est défini sur 0
(ce qui est la valeur par défaut), il correspondra automatiquement à la largeur de votre console.
full_line_newline
Insérez une nouvelle ligne dure même si la ligne est pleine. Si line_length
est le même que la largeur de votre console et cela est activé, vous verrez Double Newlines lorsque la ligne est exactement pleine, donc généralement vous ne définissez ceci que s'ils sont différents.
separator_character
Caractère utilisé pour créer la ligne d'en-tête. Hyphen est utilisé par défaut. Si vous êtes défini sur None
ou ''
alors l'en-tête sera désactivé.
display_timestamp
Lorsqu'il est activé, un horodat est écrit dans l'en-tête Traceback.
timestamp_function
Fonction appelée pour générer un horodatage. Default est time.perf_counter
.
exception_above
Lorsqu'il est activé, l'exception s'affiche au-dessus de la trace de pile.
exception_below
Lorsqu'il est activé, l'exception s'affiche sous la trace de pile.
stack_depth
Le nombre maximum d'entrées de la trace de pile à afficher. Lorsque 0
affiche la pile entière, ce qui est la valeur par défaut.
top_first
Lorsque la trace de pile sera activée sera inversée, affichant d'abord le haut de la pile.
always_display_bottom
Lorsqu'il est activé (qui est par défaut), le cadre inférieur de la trace de pile sera toujours affiché.
show_suppressed
Une fois activé, toutes les exceptions supprimées dans la trace de pile seront affichées (généralement elles sont supprimées car une exception au-dessus d'eux les a remplacés). Le comportement normal Python est de les cacher.
filename_display
Comment le nom de fichier pretty_errors.FILENAME_FULL
affiché pretty_errors.FILENAME_EXTENDED
peut être pretty_errors.FILENAME_COMPACT
line_number_first
Lorsque vous activez, le numéro de ligne sera affiché en premier, plutôt que le nom de fichier.
display_link
Lorsqu'il est activé, un lien est écrit sous l'emplacement d'erreur, sur lequel VSCODE vous permettra de cliquer sur.
lines_after
, lines_before
Combien de lignes de code à afficher pour le cadre supérieur, avant et après la ligne, l'exception s'est produite.
trace_lines_after
, trace_lines_before
Combien de lignes de code à afficher les uns pour les autres dans la trace de pile, avant et après la ligne, l'exception s'est produite.
truncate_code
Lorsqu'il est activé, chaque ligne de code sera tronquée pour s'adapter à la longueur de la ligne.
display_locals
Lorsqu'ils sont activés, les variables locales apparaissant dans le code de trame de pile supérieur seront affichées avec leurs valeurs.
display_trace_locals
Lorsqu'ils sont activés, les variables locales apparaissant dans un autre code de trame de pile seront affichées avec leurs valeurs.
truncate_locals
Lorsqu'il est activé, les valeurs des variables locales affichées seront tronquées pour s'adapter à la longueur de la ligne.
display_arrow
Lorsqu'il est activé, une flèche sera affichée pour les erreurs de syntaxe, pointant le jeton offensant.
arrow_head_character
, arrow_tail_character
Caractères utilisés pour dessiner la flèche qui pointe aux erreurs de syntaxe.
inner_exception_message
Message affiché lorsqu'une exception se produit à l'intérieur d'un autre, entre les deux exceptions. La valeur par défaut None
, qui affichera simplement les exceptions séparées par l'en-tête. Si vous souhaitez imiter le comportement non professionnel par défaut, utilisez ceci:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
Notez que si vous utilisez top_first
, la commande sera inversée, vous devez donc utiliser un message comme celui-ci à la place:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
La valeur par défaut est False
. Lorsqu'il est défini sur True
un en-tête sera écrit avant l' inner_exception_message
.
prefix
Chaîne de texte qui s'affiche en haut du rapport, juste en dessous de l'en-tête.
infix
Chaîne de texte qui s'affiche entre chaque trame de la pile.
postfix
Chaîne de texte qui s'affiche en bas du rapport d'exception.
reset_stdout
Lorsqu'il est activé, la séquence d'échappement de réinitialisation sera écrite sur STDOUT ainsi que Stderr; Allumez cela si votre console se retrouve avec la mauvaise couleur.
Ces chaînes de couleurs seront sorties avant la partie pertinente du message d'exception. Vous pouvez inclure des chaînes de séquences non-escape si vous le souhaitez; Si vous n'avez pas de terminal qui prend en charge la sortie des couleurs, ou si vous souhaitez simplement inclure une démarcation supplémentaire.
header_color
Échappez la séquence pour définir la couleur de l'en-tête.
timestamp_color
Échappez la séquence pour définir la couleur de l'horodatage.
exception_color
Échappez la séquence pour définir la couleur de l'exception.
exception_arg_color
Échappez la séquence pour définir la couleur des arguments d'exception.
exception_file_color
Échappez la séquence pour définir la couleur des noms de fichiers dans des exceptions (par exemple, dans un filenotfounderror).
filename_color
Échappez la séquence pour définir la couleur du nom de fichier.
line_number_color
Échappez la séquence pour définir la couleur du numéro de ligne.
function_color
Échappez la séquence pour définir la couleur de la fonction.
link_color
Échappez la séquence pour définir la couleur du lien.
line_color
Échappez la séquence pour définir la couleur de la ligne de code qui a provoqué l'exception.
code_color
Échappez la séquence pour définir la couleur des autres lignes de code affichées.
arrow_head_color
, arrow_tail_color
Échappez la séquence pour définir la couleur de la flèche qui pointe aux erreurs de syntaxe.
syntax_error_color
Échappez la séquence pour définir la couleur du jeton d'erreur de syntaxe.
local_name_color
Échappez la séquence pour définir la couleur des noms de variables locaux.
local_value_color
Échappez la séquence pour définir la couleur des valeurs variables locales.
local_len_color
Échappez la séquence pour définir la couleur de la longueur de valeur locale lorsque local est tronqué.
pretty_errors
a des constantes de séquence d'échappement intégrées que vous pouvez utiliser lors du définition de ces couleurs:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
Pour chaque couleur, il y a une variante BRIGHT_
correspondante (c'est-à-dire pretty_errors.BRIGHT_RED
), ainsi qu'une variante _BACKGROUND
pour définir la couleur d'arrière-plan (c'est-à-dire pretty_errors.RED_BACKGROUND
).
Par exemple:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
Pour la personnalisation la plus étendue (à moins de fournir le package), vous pouvez remplacer la classe ExceptionWriter
par défaut, vous permettant d'adapter la sortie comme vous le souhaitez. En règle générale, vous n'aurez qu'à remplacer les méthodes write_
.
Par exemple:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
Exécutez help(pretty_errors.ExceptionWriter)
dans l'interpréteur Python pour plus de détails.