Ipython: Absturz mit Python-Dateien in falscher Kodierung

Erstellt am 17. Sept. 2016  ·  3Kommentare  ·  Quelle: ipython/ipython

%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:

  • ein Nicht-ASCII-Zeichen enthalten
  • einen Fehler enthalten (bei Ausführung mit Python3 wird ein Stack-Trace generiert, aber kein Absturz)
  • mit einer falschen Kodierung gespeichert werden

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.

Hilfreichster Kommentar

Ich zähle dreizehn verkettete Tracebacks - ich denke, dass Sie so viele ohne Rekursion bekommen, sollten Sie eine Art Preis einbringen. ;-)

Alle 3 Kommentare

Ich zähle dreizehn verkettete Tracebacks - ich denke, dass Sie so viele ohne Rekursion bekommen, sollten Sie eine Art Preis einbringen. ;-)

9955 ist eine grobe Lösung dafür; der Fehler ist nicht sehr informativ, aber es stürzt IPython nicht ab.

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen