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 等),您可能只希望在跟踪中看到来自您自己的应用程序的代码。您可以通过在 TracebackinstallConsole.print_exceptionRichHandler 上设置 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)