%run
Wenn Sie eine Python-Datei erstellen, die mit # -*- coding: utf-8 -*-
markiert und in einem Nicht-utf8-Format gespeichert wurde, kann ipython zum Absturz gebracht werden (zurück zur Shell).
Um den Absturz zu bekommen, muss die Datei:
Hier ist ein kleines Skript, das dies reproduziert, gespeichert in ISO-8859-15, zusammen mit dem Stack-Trace:
dateien.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]'}
Natürlich sollte die Datei in erster Linie im richtigen Format gespeichert worden sein.
Aber idealerweise würde die Sitzung nicht verloren gehen und eine informativere Nachricht ausgegeben werden.
Ich zähle dreizehn verkettete Tracebacks - ich denke, dass Sie so viele ohne Rekursion bekommen, sollten Sie eine Art Preis einbringen. ;-)
Wenn der Dateiname nicht leicht zu erreichen ist, habe ich mit diesem Befehl den Täter ausfindig gemacht:
find . -name "*.py" -exec file {} \; | grep -v ASCII | grep -v UTF-8 | grep -v empty
Hilfreichster Kommentar
Ich zähle dreizehn verkettete Tracebacks - ich denke, dass Sie so viele ohne Rekursion bekommen, sollten Sie eine Art Preis einbringen. ;-)