You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用doctest测试pandas时,如何固定输出示例的列数?

问题

我有一个包含多个输出pandas DataFrame方法的包,想用pytest结合doctest测试示例,按照pytest doctest集成的要求,测试时需要输出的DataFrame列数与示例完全一致。但运行pytest --doctest-modules时出错:示例里显示完整7列,实际输出却用省略号隐藏了部分列,具体差异如下:

示例代码及预期输出:

>>> import pandas
>>> df = pandas.DataFrame({"variable_1": range(3)})
>>> for i in range(2, 8): df["variable_"+str(i)] = range(3)
>>> df
   variable_1  variable_2  variable_3  variable_4  variable_5  variable_6  variable_7
0           0           0           0           0           0           0           0
1           1           1           1           1           1           1           1
2           2           2           2           2           2           2           2

实际错误差异:

Differences (unified diff with -expected +actual):
    @@ -1,4 +1,6 @@
    -   variable_1  variable_2  variable_3  variable_4  variable_5  variable_6  variable_7
    -0           0           0           0           0           0           0           0
    -1           1           1           1           1           1           1           1
    -2           2           2           2           2           2           2           2
    +   variable_1  variable_2  variable_3  ...  variable_5  variable_6  variable_7
    +0           0           0           0  ...           0           0           0
    +1           1           1           1  ...           1           1           1
    +2           2           2           2  ...           2           2           2
    +<BLANKLINE>
    +[3 rows x 7 columns]

想知道:有没有办法固定输出列数?doctest的终端输出是否始终固定?

解决方法

  • 固定pandas显示参数:pandas会根据终端宽度自动截断列,要强制显示所有列,在doctest示例开头添加以下配置:

    >>> import pandas as pd
    >>> pd.set_option('display.max_columns', None)  # 显示全部列
    >>> pd.set_option('display.width', None)  # 适配列宽,避免换行截断
    

    加入这些设置后,DataFrame会输出完整的所有列,和示例匹配。

  • 临时设置避免全局影响:如果不想全局修改pandas配置,可使用上下文管理器临时调整:

    >>> import pandas as pd
    >>> with pd.option_context('display.max_columns', None, 'display.width', None):
    ...     print(df)
    

    该设置仅在当前代码块内生效,不会干扰其他测试用例。

  • 关于doctest输出的固定性:doctest的输出本身是固定的,但pandas的输出依赖自身显示配置和运行环境的终端宽度。只要统一设置pandas的显示参数,就能保证doctest输出稳定一致,不会出现省略号或格式差异。

内容的提问来源于stack exchange,提问作者Paul Rougieux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:55:03