使Python异常输出使其清晰可见。安装它
python -m pip install pretty_errors
如果您希望在运行Python脚本时使用pretty_errors
,则必须将其添加到Python启动过程中。您可以通过运行轻松地做到这一点:
python -m pretty_errors
这是使用pretty_errors
的推荐方法;除了更简单和通用外,使用它将意味着SyntaxError
异常也会变得精美(如果您是手动导入pretty_errors
则无效)。
如果您尚未普遍安装它,则可以通过将其导入到项目中:
import pretty_errors
请注意,您需要在能够输出颜色输出的终端中运行以获取颜色输出:在Windows pretty_errors.mono()
,这意味着PowerShell,CMDER等。它将以对单色输出有用的方式设置一些配置选项。
如果要配置输出,请使用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' )
PYTHON_PRETTY_ERRORS
设置为0
来禁用pretty_errors
。 IE在命令提示符: set PYTHON_PRETTY_ERRORS=0
调用pretty_errors.activate()
将覆盖此。
如果您希望选择性地利用pretty_errors
,请使用以上内容,然后在您的代码中执行计算以确定是否调用pretty_errors.activate()
。
pretty_errors
(例如,以保留错误日志)。如果您想这样做,那么将PYTHON_PRETTY_ERRORS_ISATTY_ONLY
设置为non-Zero会导致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
(默认为0),它将自动匹配您的控制台宽度。
full_line_newline
即使线已满,也可以插入硬新线。如果line_length
与您的控制台宽度相同,并且启用了这一点,那么当行完全满时,您会看到双重新线,因此通常只有在它们不同的情况下才会设置此线。
separator_character
字符用于创建标题线。默认情况下使用连字符。如果设置为None
或''
则将禁用标题。
display_timestamp
启用时,将在Trackback标头中写入时间戳。
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
当一个异常发生在另一个异常之间时显示的消息。默认值是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_
variant(即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 ()
在Python解释器中运行help(pretty_errors.ExceptionWriter)
以获取更多详细信息。