【问题标题】:IPython print output is brokenIPython 打印输出损坏
【发布时间】:2020-07-24 15:53:34
【问题描述】:

我在虚拟环境中安装了 Jupyter 和 Ipython。每当我在 IPython REPL 中键入内容并按 Enter 键时,输出前面都会出现一堆重复的垃圾:

In [2]: print("Hello, world!")

line='print("Hello, world!")\n', last_line=b'', encoding=None
print
(
"Hello, world!"
)


line=b'', last_line='print("Hello, world!")\n', encoding=None

line='print("Hello, world!")\n', last_line=b'', encoding=None
print
(
"Hello, world!"
)


line=b'', last_line='print("Hello, world!")\n', encoding=None

line='print("Hello, world!")\n', last_line=b'', encoding=None
print
(
"Hello, world!"
)


line=b'', last_line='print("Hello, world!")\n', encoding=None
Hello, world!
In [3]: 2 + 2
line='2 + 2\n', last_line=b'', encoding=None
2
+
2


line=b'', last_line='2 + 2\n', encoding=None

line='2 + 2\n', last_line=b'', encoding=None
2
+
2


line=b'', last_line='2 + 2\n', encoding=None

line='2 + 2\n', last_line=b'', encoding=None
2
+
2


line=b'', last_line='2 + 2\n', encoding=None

line='2 + 2', last_line=b'', encoding=None
2
+
2
line='', last_line='2 + 2', encoding=None
Out[3]: 4

此垃圾输出出现在终端中的 IPython REPL 和浏览器中的 Jupyter 笔记本中。

我正在运行带有 Python 3.8.1 的 Windows 10。软件包版本是:

  • jupyter 1.0.0
  • ipython 7.17.0
  • 笔记本 6.1.1

这些是通过 Poetry 安装的。我在另一台 PC(运行 Linux)上安装了完全相同的 Python 和软件包版本,但问题没有出现,所以我怀疑我的 Windows PC 上的配置有误,而不是 IPython 中的错误。

如何让它再次正常打印?

【问题讨论】:

  • 请列出您的全套软件包和您的环境变量
  • 普通的python repl能用吗?

标签: python configuration jupyter-notebook ipython


【解决方案1】:

有几个选项:

  1. 尝试在脚本中使用以下代码来查看编码输出是否发生变化。这表明问题可能出在哪里。
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

... your code ...

print "something"

  1. 如果您使用 pprint 打印:您可能想尝试使用 %pprint 命令打开或关闭漂亮打印。

  2. 如果日志记录(导入日志记录)处于活动状态:

logging.getLogger().setLevel(logging.CRITICAL)

另请参阅:https://docs.python.org/3/library/logging.html

【讨论】:

  • 我收到NameError: name 'reload' is not defined。我从importlib 导入它,然后得到AttributeError: module 'sys' has no attribute 'setdefaultencoding'。我使用的是 Python 3,而不是 2。
  • 切换%pprint 什么也没做。我尝试了日志记录部分,但它导致事件循环中出现未处理的异常:Exception [WinError 995] The I/O operation has been aborded because of either a thread exit or an application request, press ENTER to continue(完整的回溯太长,无法放入评论)
  • 我将 Python 版本降级到 3.7,问题并未出现。我已在 IPython 的 github 上将其报告为错误。
  • 我认为它与 python 本身无关。降级肯定会重置一些东西。看起来有些东西是在调试模式下编译的。如果再次升级到 py3.8.1 会怎样?如果再次出现,则将以下三个中的每一个降级:jupyter 1.0.0、ipython 7.17.0 或 notebook 6.1.1,直到解决。原因:我运行的是Win10和3.8.1。也没有显示您发布的此类输出。
  • 升级回 3.8 让它再次崩溃。我有两个完全独立的 Python 虚拟环境,它们具有相同的包,唯一的区别是 Python 版本。 3.7 的工作正常,3.8 的输出很差。事实证明,jupyternotebook 在这里无关紧要;只需安装 ipython 包(连同它的依赖项)并启动它的 REPL。
猜你喜欢
  • 2018-11-05
  • 1970-01-01
  • 2014-01-24
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
相关资源
最近更新 更多