Ipython: 間違ったエンコーディングのPythonファイルでクラッシュする

作成日 2016年09月17日  ·  3コメント  ·  ソース: ipython/ipython

%run # -*- coding: utf-8 -*-マークされ、非utf8形式で保存されたPythonファイルを作成すると、ipythonがクラッシュする可能性があります(シェルに戻る)。
クラッシュを取得するには、ファイルは次のようにする必要があります。

  • 非ASCII文字が含まれている
  • エラーが含まれています(python3で実行すると、スタックトレースが生成されますが、クラッシュは発生しません)
  • 間違ったエンコーディングで保存される

これを再現した小さなスクリプトを、スタックトレースとともにISO-8859-15に保存します。
files.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 評価