Traceback¶
Rich 可以使用语法高亮和格式渲染 Python 跟踪。Rich 跟踪比标准 Python 跟踪更容易阅读,并且显示更多代码。
要查看 Rich 跟踪的示例,请运行以下命令
python -m rich.traceback
打印跟踪¶
print_exception()
方法将为当前正在处理的异常打印跟踪。以下是一个示例
from rich.console import Console
console = Console()
try:
do_something()
except Exception:
console.print_exception(show_locals=True)
show_locals=True
参数会导致 Rich 显示跟踪每个框架的局部变量的值。
有关较大的示例,请参见 exception.py。
Traceback 处理程序¶
Rich 可以安装为默认跟踪处理程序,以便所有未捕获的异常都将使用高亮显示渲染。以下是方法
from rich.traceback import install
install(show_locals=True)
有一些选项可以配置跟踪处理程序,有关详细信息,请参见 install()
。
自动 Traceback 处理程序¶
在某些情况下,您可能希望自动安装跟踪处理程序,而无需担心在模块中导入代码。您可以通过修改虚拟环境中的 sitecustomize.py 来做到这一点。通常它位于虚拟环境路径中,位于 site-packages 文件夹下,类似于以下内容
./.venv/lib/python3.9/site-packages/sitecustomize.py
在大多数情况下,此文件将不存在。如果它不存在,您可以通过以下方法创建它
$ touch .venv/lib/python3.9/site-packages/sitecustomize.py
将以下代码添加到文件中
from rich.traceback import install
install(show_locals=True)
此时,所有在虚拟环境中运行的代码的跟踪将被安装。
注意
如果您打算分享您的代码,最好将跟踪安装包含在您的主要入口点模块中。
抑制框架¶
如果您正在使用框架(click、django 等),您可能只希望在跟踪中看到来自您自己的应用程序的代码。您可以通过在 Traceback、install、Console.print_exception 和 RichHandler 上设置 suppress 参数来排除框架代码,该参数应为模块或字符串路径的列表。
以下是如何从 Rich 异常中排除 click
import click
from rich.traceback import install
install(suppress=[click])
被抑制的框架将仅显示行号和文件,没有任何代码。
最大框架¶
递归错误会产生非常大的跟踪,需要很长时间才能渲染,并且包含许多重复的框架。Rich 通过 max_frames 参数对此进行防护,默认值为 100。如果跟踪包含超过 100 个框架,则只显示前 50 个和后 50 个。您可以通过将 max_frames 设置为 0 来禁用此功能。
以下是如何打印递归错误的示例
from rich.console import Console
def foo(n):
return bar(n)
def bar(n):
return foo(n)
console = Console()
try:
foo(1)
except Exception:
console.print_exception(max_frames=20)