首页 > 解决方案 > 即使我没有打印,jupyter 也会打印太多输出

问题描述

最近 Jupyter(笔记本和实验室)开始打印任何东西,就好像我分别执行每一行一样。它曾经打印出执行的最后一行的输出,但现在它会打印所有内容,如下所示。

在此处输入图像描述

我可以通过这样做来抑制这一点,例如,_ = axs[0].plot(~~~)但是在每行的末尾加上分号并没有帮助。我已经重新安装了 Anaconda,但没有任何改变。

我在 MBP 2018 15" 上使用 macOS 10.14.6,在 MS Edge 87.0.664.47 上使用 Python 3.8(基本上是当前 Anaconda 安装的所有内容,无需任何额外安装)。

编辑: 更准确地说,任何具有分配给变量的返回值的代码行总是打印。以前,每行仅在代码的最后一行时才被“打印”。这种奇怪的行为不管包,比如 numpy 或 pandas 都会发生: 在此处输入图像描述

(仅供参考,可复制的文字:

import numpy as np
import pandas as pd

def add_with_return(arr):
    arr += 1
    return arr

a = np.arange(10)
b = pd.DataFrame(dict(value=a))
a, b
add_with_return(a)
c = np.linspace(0, 1)

)

编辑2

我使用的软件包版本

$ jupyter --version
jupyter core     : 4.6.3
jupyter-notebook : 6.1.4
qtconsole        : 4.7.7
ipython          : 7.19.0
ipykernel        : 5.3.4
jupyter client   : 6.1.7
jupyter lab      : 2.2.6
nbconvert        : 6.0.7
ipywidgets       : 7.5.1
nbformat         : 5.0.8
traitlets        : 5.0.5

编辑 3:

我想我终于找到了一个解决方法: 放在代码单元格的最后一行的;末尾

示例:在单元格末尾添加一条虚拟线None;以使所有不需要的打印静音。

在此处输入图像描述

但是,一旦您在代码单元格的最后一行有任何没有;在其末尾的代码行,它就会再次打印所有内容(无论您;在其他行的末尾是否有)

我想听听是否有更好的解决方案。(谁会一直想放分号......?)

标签: pythonjupyter

解决方案


在 IPython 中,有一个选项InteractiveShell.ast_node_interactivity可以设置为“all”、“last”、“last_expr”、“none”或“last_expr_or_assign”。默认设置是“last_expr”。在此处的 IPython 文档中找到更多信息。

当我在 Jupyter 单元格中键入以下内容时,以模仿您的情况。

InteractiveShell.ast_node_interactivity = 'all'

您提供的代码:

import numpy as np
import pandas as pd

def add_with_return(arr):
    arr += 1
    return arr

a = np.arange(10)
b = pd.DataFrame(dict(value=a))
a, b
add_with_return(a)
c = np.linspace(0, 1)

它提供以下输出:

(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
    value
 0      0
 1      1
 2      2
 3      3
 4      4
 5      5
 6      6
 7      7
 8      8
 9      9)

 array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

最后使用以下命令将其恢复到以前的状态。

InteractiveShell.ast_node_interactivity = 'last_expr'     

推荐阅读