追踪

Full-Stack-python / 2023-09-13 / 原文

Rich 可以使用语法突出显示和格式来呈现 Python 回溯。与标准 Python 回溯相比,丰富的回溯更易于阅读并显示更多的代码。

若要查看 Rich 回溯的示例,请运行以下命令:

python -m rich.traceback

打印回落

该方法将打印当前正在处理的异常的回溯。下面是一个示例:

from rich.console import Console
console = Console()

try:
    do_something()
except Exception:
    console.print_exception(show_locals=True)

该参数使 Rich 显示回溯的每一帧的局部变量值。show_locals=True

有关更大的示例,请参阅 exception.py。

回溯处理程序

可以将 Rich 安装为默认回溯处理程序,以便呈现所有未捕获的异常并突出显示。方法如下:

from rich.traceback import install
install(show_locals=True)

有几个选项可用于配置回溯处理程序,有关详细信息,请参阅。

自动回溯处理程序

在某些情况下,您可能希望自动安装回溯处理程序,而不必担心在模块中导入代码。您可以通过修改虚拟环境中的 sitecustomize.py 来执行此操作。通常,它将位于虚拟环境路径中,在站点包文件夹下,如下所示:

./.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等),你可能只对在回溯中查看你自己的应用程序的代码感兴趣。您可以通过在回溯安装Console.print_exception和 RichHandler 上设置 suppress 参数来排除框架代码,该参数应该是模块或 str 路径的列表。

下面介绍了如何从富媒体资源异常中排除点击次数:

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)