【问题标题】:Print not showing in ipython notebook打印未显示在 ipython 笔记本中
【发布时间】:2014-10-19 02:12:16
【问题描述】:

我正在使用ipython notebook (http://ipython.org/notebook.html) 做demo,打印功能好像不行:

为了清楚起见,这里重写了上图中的命令。

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

In [2]: print 'hello world'

简而言之,[2] 没有打印输出。

有谁知道这是否是一个已知的错误?有谁知道如何解决它?

【问题讨论】:

  • 据我所知,这不是一个已知的错误。如果可以复制,请提交an issue
  • 问题细胞的细胞类型是什么?
  • 我也有同样的问题。要“修复”它,我必须重新启动内核。你有没有找到真正的解决方法?
  • @tmthyjames,不,我还没有找到真正的解决方法。如何重启内核?
  • @alvas 在顶部选项卡上单击内核 > 重新启动。我找到了解决问题的方法;不确定它是否适用于您的。我没有运行sys.setdefaultencoding('utf-8')(这导致了我的打印问题),而是单独对变量进行了编码:foo.encode('utf-8')。同样,不确定您的问题是否与我的相同,但这解决了我的问题。

标签: python printing ipython jupyter-notebook


【解决方案1】:

当我的第一个代码单元格是:

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

然后我这样评论第二行和第三行:

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

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

后来,我发现当我第一次遇到打印问题时,所有打印输出实际上都被发送到 ipython 控制台终端(在我的 Linux 机器上),而不是嵌入到笔记本上。

【讨论】:

  • 对我来说也一样。所有打印输出都发送到控制台。还将默认编码设置为 utf8。
  • 这一切都很好,但是如果对reload(sys) 的调用在另一个python 包中(例如pykwalify==1.5.2),则不能解决问题。这个线程中的另一个修复是,当它存储输出流时,它会重新加载 sys(无论它发生在哪里),然后将输出流重置为您存储的那个。
  • 重载未定义
【解决方案2】:

我遇到了类似的问题(reload(sys) 在我导入的包中)。

我的解决方法是在脚本顶部导入sys,并将sys.stdout 存储在单独的变量中,例如stdout.

然后我导入所有其他内容,包括调用 reload(sys) 的内容。

然后,最后,我设置了sys.stdout = stdout,它将输出重定向回 IPython 笔记本

【讨论】:

  • 这应该是正确的答案。如果您需要默认编码为utf8,上面的答案并不能解决问题。真正的问题是,通过重新加载 sys,它会将标准输出重置到控制台,因此您需要将其重置为此处所示。
【解决方案3】:

接受@JoostJM 所说的,哪个有效,并将其作为代码:

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

更改默认编码会将输出定向到控制台,这会将其设置回 jupyter 笔记本。

【讨论】:

  • print("Hello World") 如果使用 Python 3
【解决方案4】:

我使用的是 Python 3,所以解决方案对我来说有点不同。

import sys
stdout = sys.stdout

# some functions that mess up sys.stdout

sys.stdout = stdout

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 2015-04-07
    • 1970-01-01
    • 2017-01-25
    • 2016-02-24
    • 2016-07-19
    • 1970-01-01
    • 2014-03-12
    • 2015-01-16
    相关资源
    最近更新 更多