Ipython: 使用错误编码的 python 文件崩溃

创建于 2016-09-17  ·  3评论  ·  资料来源: ipython/ipython

%run使用标有# -*- coding: utf-8 -*-并以非 utf8 格式保存的 python 文件会使 ipython 崩溃(返回 shell)。
要发生崩溃,文件必须:

  • 包含非 ASCII 字符
  • 包含错误(使用 python3 运行时,会生成堆栈跟踪,但不会崩溃)
  • 以错误的编码保存

这是一个复制此内容的小脚本,保存在 ISO-8859-15 中,以及堆栈跟踪:
文件.zip

%run wrong_encoding.py
...
... <long trace>
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 78: invalid continuation byte
 python3 -c "import IPython; print(IPython.sys_info())"
{'commit_hash': '5c9c918',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': '/usr/lib/python3.4/site-packages/IPython',
 'ipython_version': '5.1.0',
 'os_name': 'posix',
 'platform': 'Linux-3.16.7-42-desktop-x86_64-with-SuSE-13.2-x86_64',
 'sys_executable': '/usr/bin/python3',
 'sys_platform': 'linux',
 'sys_version': '3.4.5 (default, Jul 03 2016, 13:55:08) [GCC]'}

当然,文件首先应该以正确的格式保存。

但理想情况下,会话不会丢失,并且会发出信息更丰富的消息。

最有用的评论

我数了 13 个链接回溯——我认为在不使用递归的情况下获得这么多回溯应该会给你一些奖励。 ;-)

所有3条评论

我数了 13 个链接回溯——我认为在不使用递归的情况下获得这么多回溯应该会给你一些奖励。 ;-)

9955 是一个粗略的解决方案; 该错误信息量不大,但不会使 IPython 崩溃。

如果文件名不容易获得,那么这里是我用来追查罪魁祸首的命令:

find . -name "*.py" -exec file {} \; | grep -v ASCII | grep -v UTF-8 | grep -v empty

此页面是否有帮助?
0 / 5 - 0 等级