当我们写的一个脚本或程序发生各种不可预知的异常时,如果我们没有进行捕获处理的时候,通常都会致使程序崩溃退出,并且会在终端打印出一堆密密麻麻的traceback堆栈信息来告诉我们,是哪个地方出了问题。
为江北等地区用户提供了全套网页设计制作服务,及江北网站建设行业解决方案。主营业务为网站设计、网站制作、江北网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
上面这段 traceback
那有没有一种办法,可以解决这些问题呢?
当然有了,在 Python 中,没有什么问题是一个库解决不了的,如果有,那就等你去开发这个库。
今天要介绍的这个库呢,叫做 pretty-errors
,从名字上就可以知道它的用途,是用来美化错误信息的。
通过这条命令你可以安装它
$ python3 -m pip install pretty-errors
由于使用了 pretty-errors
后,你的 traceback 信息输出,会有代码高亮那样的效果,因此当你在使用测试使用 pretty-error
时,请确保你使用的终端可以输出带有颜色的字体。
在 windows 上你可以使用 Powershell,cmder 等
在 Mac 上你可以使用自带的终端,或者安装一个更好用的 iTerm2
随便写一个没有使用 pretty-errors ,并且报错了的程序,是这样子的。
而使用了 pretty_errors 后,报错信息被美化成这样了。
是不是感觉清楚了不少,那种密密麻麻带来的焦虑感是不是都消失了呢?
当然这段代码少,你可能还没感受到,那就来看下 该项目在 Github上的一张效果对比图吧
可以看到使用了 pretty_errors 后,无非就是把过滤掉了一些干扰我们视线的无用信息,然后把有用的关键信息给我们高亮显示。
既然既然这样,那 pretty_errors 应该也能支持我们如何自定义我们选用什么样的颜色,怎么排版吧?
答案是显而易见的。
pretty_errors 和其他库不太一样,在一定程度上(如果你使用全局配置的话),它并不是开箱即用的,你在使用它之前可能需要做一下配置。
使用这一条命令,会让你进行配置,可以让你在该环境中运行其他脚本时的 traceback 输出都自动美化。
$ python3 -m pretty_errors
配置完成后,你再运行任何脚本,traceback 都会自动美化了。
不仅是在我的 iTerm 终端下
在 PyCharm 中也会
唯一的缺点就是,原先在 PyCharm 中的 traceback 可以直接点击 文件路径
直接跳转到对应错误文件代码行,而你如果是在 VSCode 可以使用 下面自定义配置的方案解决这个问题(下面会讲到,参数是:display_link
)。
因此,有些情况下,你并不想设置 pretty_errors
全局可用。
那怎么取消之前的配置呢?
只需要再次输出 python -m pretty_errors
,输出入 C
即可清除。
取消全局可用后,你可以根据自己需要,在你需要使用 pretty-errors
的脚本文件中导入pretty_errors
,即可使用
import pretty_errors
就像这样
import pretty_errors
def foo():
1/0
if __name__ == "__main__":
foo()
值得一提的是,使用这种方式,若是你的脚本中,出现语法错误,则输出的异常信息还是按照之前的方式展示,并不会被美化。
因此,为了让美化更彻底,官方推荐你使用 python -m pretty_errors
上面的例子里,我们使用的都是 pretty_errors
的默认美化格式,展示的信息并没有那么全。
比如
如果使用了 pretty_errors
导致异常信息有丢失,那还不如不使用 pretty_errors
呢。
不过,可以告诉你的是,pretty_errors
并没有你想象的那么简单。
它足够开放,支持自定义配置,可以由你选择你需要展示哪些信息,怎么展示?
这里举一个例子
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,
)
# 原来的代码
def foo():
1/0
if __name__ == "__main__":
foo()
在你像上面这样使用 pretty_errrs.configure
进行配置时,抛出的的异常信息就变成这样了。
当然了,pretty_errors.configure()
还可以接收很多的参数,你可以根据你自己的需要进行配置。
header_color
:设置标题行的颜色。timestamp_color
:设置时间戳颜色default_color
:设置默认的颜色filename_color
:设置文件名颜色line_number_color
:设置行号颜色。function_color
:设置函数颜色。link_color
:设置链接的颜色。在设置颜色的时候,pretty_errors
提供了一些常用的 颜色常量供你直接调取。
BLACK
:黑色GREY
:灰色RED
:红色GREEN
:绿色YELLOW
:黄色BLUE
:蓝色MAGENTA
:品红色CYAN
:蓝绿色WHITE
:白色而每一种颜色,都相应的匹配的 BRIGHT_
变体 和 _BACKGROUND
变体,
其中,_BACKGROUND
用于设置背景色,举个例子如下。
line_number_first
lines_before
: 显示发生异常处的前几行代码lines_after
: 显示发生异常处的后几行代码display_link
:启用后,将在错误位置下方写入链接,VScode将允许您单击该链接。separator_character
:用于创建标题行的字符。默认情况下使用连字符。如果设置为 ''
或者 None
,标题将被禁用。display_timestamp
:启用时,时间戳将写入回溯头中。display_locals
启用后,将显示在顶部堆栈框架代码中的局部变量及其值。
display_trace_locals
line_length
:设置每行的长度,默认为0,表示每行的输出将与控制台尺寸相匹配,如果你设置的长度将好与控制台宽度匹配,则可能需要禁用full_line_newline
,以防止出现明显的双换行符。
full_line_newline
:当输出的字符满行时,是否要插入换行符。
timestamp_function
调用该函数以生成时间戳。默认值为time.perf_counter
。
top_first
启用后,堆栈跟踪将反转,首先显示堆栈顶部。
display_arrow
启用后,将针对语法错误显示一个箭头,指向有问题的令牌。
truncate_code
启用后,每行代码将被截断以适合行长。
stack_depth
要显示的堆栈跟踪的大条目数。什么时候0
将显示整个堆栈,这是默认值。
exception_above
启用后,异常将显示在堆栈跟踪上方。
exception_below
:
启用后,异常显示在堆栈跟踪下方。
reset_stdout
启用后,重置转义序列将写入stdout和stderr;如果您的控制台留下错误的颜色,请启用此选项。
filename_display
设置文件名的展示方式,有三个选项: pretty_errors.FILENAME_COMPACT
、pretty_errors.FILENAME_EXTENDED
,或者pretty_errors.FILENAME_FULL
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。