Придерживаетесь вывода исключений Python, чтобы сделать его разборчивым. Установите его с
python -m pip install pretty_errors
Если вы хотите, чтобы pretty_errors
использовались всякий раз, когда вы запускаете сценарий Python, вы должны добавить его в процедуру запуска Python. Вы можете сделать это легко, работая:
python -m pretty_errors
Это рекомендуемый способ использовать pretty_errors
; Помимо того, что он будет более простым и универсальным, использование его будет означать, что исключения SyntaxError
также будут отформатироваться красиво (что не работает, если вы вручную импортируете pretty_errors
).
Если вы не установили его повсеместно, вы можете использовать его в своем проекте, просто импортируя его:
import pretty_errors
ПРИМЕЧАНИЕ. Вы должны работать в терминале, способном к цвету вывод, чтобы получить выход цвета: в Windows это означает, что PowerShell, Cmder и т. Д. Если вам необходимо использовать монохромный терминал, то вы можете вызвать функцию Helper 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 ()
Обратите внимание, что это потеряет некоторую функциональность, так как 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' )
pretty_errors
, установив переменную среды PYTHON_PRETTY_ERRORS
на 0
. т.е. в командной строке: set PYTHON_PRETTY_ERRORS=0
Вызов pretty_errors.activate()
переопределяет это.
Если вы хотите выборочно использовать pretty_errors
, то используйте вышеуказанное, а в вашем коде выполните свой расчет, чтобы определить, можно ли вызовать pretty_errors.activate()
.
pretty_errors
, когда вы перенаправляете вывод в файл (например, журналы ошибок). Если вы хотите сделать это, то установка PYTHON_PRETTY_ERRORS_ISATTY_ONLY
на Non-Rue заставит pretty_errors
проверить, работает ли он в интерактивном терминале, и активируется только в том случае, если это так. set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
Установка Это отключит replace_stderr()
в тех же ситуациях, если только вы не позвоните его с параметром force
: replace_stderr(force=True)
.
Вызов pretty_errors.activate()
переопределяет это.
Вы можете проверить 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
При включении все будут показаны все подавленные исключения в трассировке стека (обычно они подавляются, потому что исключение над ними заменило их). Нормальное поведение на питоне - скрыть их.
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
Сообщение отображается, когда одно исключение происходит внутри другого, между двумя исключениями. По умолчанию None
, что просто отобразит исключения, разделенные заголовком. Если вы хотите подражать непревзойденному поведению по умолчанию, используйте это:
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
), а также вариант _BACKGROUND
для установки цвета фона (то есть pretty_errors.RED_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 ()
Запустите help(pretty_errors.ExceptionWriter)
в интерпретаторе Python для получения более подробной информации.