打印在IPython笔记本中不显示
我正在使用 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控制台,而不是显示在笔记本里。