打印在IPython笔记本中不显示

61 投票
5 回答
110780 浏览
提问于 2025-04-18 18:29

我正在使用 ipython 笔记本(可以在这个链接找到:http://ipython.org/notebook.html)来做一个演示,但看起来打印功能没有正常工作:

在这里输入图片描述

上面图片中的命令在这里重新写了一遍,以便更清楚。

In [1]: 'hello world'
Out [1]: 'hello world'

In [2]: print 'hello world'

简单来说,[2] 没有任何打印输出。

有没有人知道这是不是一个已知的错误?还有人知道怎么解决这个问题吗?

5 个回答

1

我在用Python 3,所以我的解决办法跟别人稍微有点不同。

import sys
stdout = sys.stdout

# some functions that mess up sys.stdout

sys.stdout = stdout
2

这个问题的另一个来源可能是因为“未受信任”的笔记本。在我的情况下,我从GitHub下载了源文件,但当我执行代码单元时,没有任何输出。结果发现这个笔记本没有被信任。所以,我点击了菜单中的 File,然后选择了 Trust Notebook。Jupyter进行这个安全检查是为了避免执行隐藏在单元格中的恶意代码。

27

根据@JoostJM说的内容,这个方法是有效的,下面是代码:

import sys
stdout = sys.stdout
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = stdout

更改默认编码会把输出结果发送到控制台,而这段代码则是把输出结果重新设置回Jupyter笔记本中。

32

我遇到了一个类似的问题(就是在我引入的一个包里有reload(sys)这个代码)。

我的解决办法是在脚本的最上面先引入sys,然后把sys.stdout存到一个单独的变量里,比如叫stdout

接着,我再引入其他的东西,包括那个会调用reload(sys)的部分。

最后,我把sys.stdout = stdout,这样就把输出重新导回到IPython笔记本里了。

58

我遇到过类似的打印问题,当时我的第一个代码单元是:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

然后我把第二行和第三行注释掉,变成这样:

import sys
#reload(sys)
#sys.setdefaultencoding("utf-8")

重置了内核后重新运行程序,现在我的打印语句正常工作了。

后来我发现,最开始遇到打印问题时,所有的打印输出其实都是发送到了我Linux电脑上的ipython控制台,而不是显示在笔记本里。

撰写回答