Python例外出力を選択して読みやすくします。一緒にインストールします
python -m pip install pretty_errors
Pythonスクリプトを実行するたびにpretty_errors
を使用したい場合は、Pythonスタートアップ手順に追加する必要があります。実行することで簡単に行うことができます:
python -m pretty_errors
これは、 pretty_errors
を使用する推奨方法です。よりシンプルで普遍的であることに加えて、それを使用すると、 SyntaxError
例外がきれいにフォーマットされることを意味します(これは、手動でpretty_errors
インポートしている場合は機能しません)。
普遍的にインストールしていない場合は、プロジェクトをインポートするだけで使用できます。
import pretty_errors
色の出力を取得するには、色の出力が可能な端末で実行される必要があります。WindowsこれはPowershell、Cmderなどを意味します。モノクロ端末を使用する必要がある場合は、ヘルパー関数pretty_errors.mono()
を呼び出すことができます。モノクロ出力に役立つ方法でいくつかの構成オプションを設定します。
出力を構成する場合は、 pretty_errors.configure()
、 pretty_errors.whitelist()
、 pretty_errors.blacklist()
、 pretty_errors.pathed_config()
を使用します。例えば:
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' )
pretty_errors
sys.excepthook
使用することは不可能な場合があります。たとえば、独自のロギング( uvicorn
など)をインストールするフレームワークを使用している場合。そのような場合、 pretty_errors
代わりにstderr
に削って、独自に置き換えることができます。そうするために簡単な電話:
pretty_errors . replace_stderr ()
Stackトレース全体ではなく、画面上で出力さpretty_errors
ているものにのみアクセスできるため、これによりいくつかの機能が失われることに注意してください。優れたAPIには、通常、例外スタックと対話する方法があります。これにより、 excepthook
: replace_stderr
が最後の手段である必要があります。例については、このコメントを参照してください
関数whitelist(path)
とblacklist(path)
を使用して、必要になるパス( whitelist
)または除外( blacklist
)を追加できます。スタックの上部フレームは除外されません。
フレームのコードファイルへのパスによってトリガーされる代替構成を設定できます。たとえば、システムフレーム(「C:/Python」の下のもの)に興味がなかったが、 blacklist
を使用して完全に隠したくなかった場合は、これを行うことができます。
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' )
PYTHON_PRETTY_ERRORS
0
に設定することにより、 pretty_errors
無効にすることができます。 IEコマンドプロンプト: set PYTHON_PRETTY_ERRORS=0
pretty_errors.activate()
を呼び出すと、これがオーバーライドされます。
pretty_errors
選択的に利用する場合は、上記を使用し、Codeで計算を実行して、 pretty_errors.activate()
を呼び出すかどうかを判断します。
pretty_errors
無効にすることが望ましい場合があります。そうしたい場合は、 PYTHON_PRETTY_ERRORS_ISATTY_ONLY
を非ゼロに設定すると、 pretty_errors
がインタラクティブ端末で実行されているかどうかを確認し、その場合にのみアクティブ化します。 set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
これを設定すると、 force
パラメーターであるreplace_stderr(force=True)
で呼び出す場合を除き、同じ状況でreplace_stderr()
無効になります。
pretty_errors.activate()
を呼び出すと、これがオーバーライドされます。
check pretty_errors.terminal_is_interactive
をチェックして、端末がインタラクティブであるかどうかを確認できます( pretty_errors
sys.stderr.isatty()
チェックしてこれを設定します)。これを使用して、別の構成を選択できます。例えば:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
構成設定はpretty_errors.config
に保存されますが、 pretty_errors.configure()
を使用して設定する必要があります。デフォルトの構成のリファレンスは、 pretty_errors.default_config
に保存されます。
name
設定名を保存するオプションのフィールド。
line_length
この時点で出力がラップされます。 0
(デフォルト)に設定すると、コンソール幅が自動的に一致します。
full_line_newline
ラインがいっぱいであっても、ハードニューラインを挿入します。 line_length
がコンソール幅と同じで、これが有効になっている場合、ラインが正確にいっぱいになったときにダブルニューラインが表示されるため、通常は違う場合にのみこれを設定します。
separator_character
ヘッダーラインの作成に使用されるキャラクター。ハイフンはデフォルトで使用されます。 None
または''
に設定すると、ヘッダーは無効になります。
display_timestamp
有効になった場合、タイムスタンプはTracebackヘッダーに記述されます。
timestamp_function
タイムスタンプを生成するために呼び出された関数。デフォルトはtime.perf_counter
です。
exception_above
有効にすると、例外がスタックトレースの上に表示されます。
exception_below
有効にすると、例外がスタックトレースの下に表示されます。
stack_depth
表示するスタックトレースからのエントリの最大数。 0
スタック全体を表示する場合、これがデフォルトです。
top_first
有効になると、スタックトレースが逆になり、最初にスタックの上部が表示されます。
always_display_bottom
有効にすると(デフォルト)、スタックトレースの下部フレームが常に表示されます。
show_suppressed
スタックトレースのすべての抑制された例外が有効になると(通常、それらの上の例外がそれらを置き換えたため、それらは抑制されます)。通常のPythonの動作は、それらを隠すことです。
filename_display
ファイル名の表示方法: pretty_errors.FILENAME_COMPACT
、 pretty_errors.FILENAME_EXTENDED
、またはpretty_errors.FILENAME_FULL
line_number_first
有効になった場合、ライン番号はファイル名ではなく最初に表示されます。
display_link
有効になった場合、リンクはエラーの場所の下に書き込まれます。VSCODEでクリックすることができます。
lines_after
、 lines_before
例外が発生した行の前後に、上部フレームに表示するコードの行の数。
trace_lines_after
、 trace_lines_before
例外が発生した行の前後に、スタックトレース内のフレーム用に表示するコードの行がいくつありますか。
truncate_code
有効にすると、コードの各行がラインの長さに合うように切り捨てられます。
display_locals
有効にすると、トップスタックフレームコードに表示されるローカル変数が値とともに表示されます。
display_trace_locals
有効にすると、他のスタックフレームコードに表示されるローカル変数が値とともに表示されます。
truncate_locals
有効にすると、表示されたローカル変数の値がラインの長さに合うように切り捨てられます。
display_arrow
有効になった場合、構文エラー用に矢印が表示され、問題のあるトークンを指します。
arrow_head_character
、 arrow_tail_character
構文エラーを指す矢印を描くために使用される文字。
inner_exception_message
メッセージが表示され、2つの例外の間に、ある例外が別の例外内で発生したときに表示されます。デフォルトはNone
、ヘッダーによって区切られた例外を単純に表示します。デフォルトの非pretty動作をエミュレートしたい場合は、これを使用してください。
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
top_first
使用する場合、注文は逆転するため、代わりに次のようなメッセージを使用する必要があることに注意してください。
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
デフォルトはFalse
です。 True
に設定すると、ヘッダーはinner_exception_message
の前に記述されます。
prefix
レポートの上部に表示されるテキスト文字列は、ヘッダーのすぐ下にあります。
infix
スタックの各フレーム間に表示されるテキスト文字列。
postfix
例外レポートの下部に表示されるテキスト文字列。
reset_stdout
有効になると、リセットエスケープシーケンスはSTDOUTとSTDERRに書き込まれます。コンソールに間違った色が残されている場合は、これをオンにします。
これらのカラー文字列は、例外メッセージの関連する部分の前に出力されます。必要に応じて、エスケープ以外のシーケンス文字列を含めることができます。色の出力をサポートする端末がない場合、または単に余分な境界を含めたい場合。
header_color
ヘッダー色を設定するエスケープシーケンス。
timestamp_color
タイムスタンプの色を設定するためのエスケープシーケンス。
exception_color
例外色を設定するためのエスケープシーケンス。
exception_arg_color
例外引数を設定するためのエスケープシーケンス。
exception_file_color
例外でファイル名の色を設定するためのエスケープシーケンス(たとえば、filenotfounderrorで)。
filename_color
ファイル名を設定するためのエスケープシーケンス。
line_number_color
エスケープシーケンスを設定して、ライン番号の色を設定します。
function_color
機能色を設定するためのエスケープシーケンス。
link_color
リンク色を設定するエスケープシーケンス。
line_color
シーケンスをエスケープして、例外を引き起こしたコード行の色を設定します。
code_color
エスケープシーケンスは、他の表示されたコード行の色を設定します。
arrow_head_color
、 arrow_tail_color
シーケンスは、構文エラーを指す矢印の色を設定します。
syntax_error_color
シーケンスをエスケープして、構文エラートークンの色を設定します。
local_name_color
シーケンスをエスケープして、ローカル変数名の色を設定します。
local_value_color
エスケープシーケンスは、ローカル変数値の色を設定します。
local_len_color
ローカルが切り捨てられたときにローカル値の長さの色を設定するためのエスケープシーケンス。
pretty_errors
には、これらの色を設定するときに使用できるエスケープシーケンス定数が組み込まれています。
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
それぞれの色には、一致するBRIGHT_
バリアント(つまりpretty_errors.BRIGHT_RED
)と、背景色(つまりpretty_errors.RED_BACKGROUND
)を設定する_BACKGROUND
バリアントがあります。
例えば:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
最も広範なカスタマイズ(パッケージの分岐以外)の場合、デフォルトのExceptionWriter
クラスをオーバーライドして、希望する出力を調整できるようにすることができます。通常、 write_
メソッドをオーバーライドするだけです。
例えば:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
詳細については、Pythonインタープリターでhelp(pretty_errors.ExceptionWriter)
を実行してください。