听说过代码洁癖,Bug洁癖怎么解?

news/2024/7/5 3:49:27

来源 | Python编程时光(ID: Cool-Python)

当我们写的一个脚本或程序发生各种不可预知的异常时,如果我们没有进行捕获处理的时候,通常都会致使程序崩溃退出,并且会在终端打印出一堆 密密麻麻 的 traceback 堆栈信息来告诉我们,是哪个地方出了问题。

就像这样子,我天,我承认我有严重的 Bug 洁癖了。

上面这段 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_errorsdef foo():1/0if __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/0if __name__ == "__main__":foo()

在你像上面这样使用 pretty_errrs.configure 进行配置时,抛出的的异常信息就变成这样了。

当然了,pretty_errors.configure()  还可以接收很多的参数,你可以根据你自己的需要进行配置。

5.1 设置颜色

  • 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 用于设置背景色,举个例子如下。

5.2 设置显示内容

  • line_number_first
    启用后,将首先显示行号,而不是文件名。

  • lines_before :显示发生异常处的前几行代码

  • lines_after:显示发生异常处的后几行代码

  • display_link:启用后,将在错误位置下方写入链接,VScode将允许您单击该链接。

  • separator_character:用于创建标题行的字符。默认情况下使用连字符。如果设置为 ''或者 None ,标题将被禁用。

  • display_timestamp:启用时,时间戳将写入回溯头中。

  • display_locals
    启用后,将显示在顶部堆栈框架代码中的局部变量及其值。

  • display_trace_locals
    启用后,其他堆栈框架代码中出现的局部变量将与它们的值一起显示。

5.3 设置怎么显示

  • 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_COMPACTpretty_errors.FILENAME_EXTENDED,或者pretty_errors.FILENAME_FULL

以上,就是我对 pretty_errors 的使用体验,总的来说,这个库功能非常强大,使用效果也特别酷炫,它就跟 PEP8 规范一样,没有它是可以,但是有了它会更好一样。对于某些想自定义错误输出场景的人,pretty_errors  会是一个不错的解决方案。

【end】

原力计划

《原力计划【第二季】- 学习力挑战》正式开始!即日起至 3月21日,千万流量支持原创作者!更有专属【勋章】等你来挑战

推荐阅读

  • 2019年度CSDN博客之星TOP10榜单揭晓,你上榜了吗?

  • Javascript函数之深入浅出递归思想,附案例与代码!

  • 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码

  • 智能合约编写之Solidity的基础特性

  • 微信七年「封链」史

  • 计算机博士、加班到凌晨也要化妆、段子手……IT 女神驾到!

  • 你点的每个“在看”,我都认真当成了AI


http://lihuaxi.xjx100.cn/news/272537.html

相关文章

VS code 插件配置手册

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达VS code 插件配置手册C/C Tools插件---C/C支持安装库文件的配置GDB本地调试配置GDB远程调试配置Remote VSCode插件---远程编辑文件安装环境配置在本地端的配置在远程端的配…

Python 哪种方式循环最快,或许颠覆你的认知

众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。 和是 Python 中常…

拥抱并行流,提高程序执行速度

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:后青春期的Keatscnblogs.com/keatsCoder/p/12934394.html前言 在 Java7 之前,如果想要并行处理一个集合,我们需要以下几步 1. 手动分成几部分 2. 为每部…

命令行的全文搜索工具--ack

想必大家在命令行环境下工作时候,一定有想要查找当前目录下的源代码文件中的某些字符的需求,这时候如果使用传统方案,你可能需要输入一长串的命令,比如这样: 1. grep -R string dir/ 或者 grep -r -e string direct…

通用权限管理组件使用说明书V3.0 错误校正 感谢自由软件职业者Helper(767870484)...

有时候,真想做个像样的东西出来,但是往往各方面的能力都不够,这么多人,Helper(767870484)仔细认真的阅读了这个帮助手册、并给给于了指正,在这里非常感谢,你的劳动成果已经被通用权限…

51NOD 1773:A国的贸易——题解

http://www.51nod.com/onlineJudge/questionCode.html#!problemId1773 参考1:FWT讲解 https://www.cnblogs.com/RabbitHu/p/9182047.html 参考2:题解 https://www.cnblogs.com/ivorysi/p/9178577.html (令$\oplus$表示异或) 设$dp…

《评人工智能如何走向新阶段》后记(再续18)

由AI科技大本营下载273.人工智能与人脑智能 近年来人工智能取得了巨大进步,受人脑神经元调节机制启发的人工智能新颖算法层出不穷!但人工智能离人脑智能(或称人类智能)还差得很远,而人脑(神经元&#xff0…

2020 Top10 计算机视觉论文总结:论文,代码,解读,还有demo视频!

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达作者丨louisfb01来源丨AI公园编辑丨极市平台尽管今年世界上发生了这么多事情,我们还是有机会看到很多惊人的研究成果。特别是在人工智能更精确的说是计算机视觉领…