如何配置Jupyter中所有Python对象的美观打印(设置深度限制)
配置Jupyter全局使用带深度限制的pprint打印所有对象
要让Jupyter默认用自定义的pprint.PrettyPrinter(带深度截断)打印所有对象,你可以直接覆盖IPython的默认文本格式化器,步骤如下:
临时生效(单Notebook内)
在Jupyter Notebook中运行以下代码:
import pprint from IPython.core.formatters import PlainTextFormatter # 定义自定义打印函数,设置深度限制(这里设为3,可按需调整) def custom_pretty_print(obj, printer, cycle): if cycle: return printer.text('...') # 处理循环引用,避免无限递归 formatted = pprint.pformat(obj, depth=3) return printer.text(formatted) # 获取IPython的纯文本格式化器 plain_formatter = get_ipython().display_formatter.formatters['text/plain'] # 清除原有针对各类对象的打印规则,确保所有对象都用自定义逻辑 plain_formatter.type_printers.clear() # 为所有对象注册自定义打印机(object是所有Python类的基类) plain_formatter.for_type(object, custom_pretty_print)
永久生效(所有Jupyter会话)
如果不想每次打开Notebook都重复运行代码,可以把配置放到IPython启动脚本中:
- 若IPython配置目录不存在,先运行
ipython profile create创建,默认路径为~/.ipython/profile_default/startup/ - 在该目录下新建
.py文件(比如custom_pprint.py),将上述代码复制进去 - 重启Jupyter,以后所有会话都会自动应用这个打印规则
补充说明
pprint.pformat的depth参数可按需调整,设为None则取消深度限制- 处理
cycle参数是为了应对循环引用场景,避免打印时出现异常 - 清除
type_printers是因为IPython默认会给list、dict等内置类型单独设置打印规则,清除后才能让所有对象统一使用自定义逻辑
内容的提问来源于stack exchange,提问作者Migwell
相关产品推荐
相关产品推荐

