Ipython: chocar con archivos de Python en la codificación incorrecta

Creado en 17 sept. 2016  ·  3Comentarios  ·  Fuente: ipython/ipython

%run Un archivo de Python marcado con # -*- coding: utf-8 -*- y guardado en un formato que no sea utf8 puede bloquear ipython (volver al shell).
Para obtener el bloqueo, el archivo debe:

  • contener un carácter no ascii
  • contener un error (cuando se ejecuta con python3, se genera un seguimiento de pila, pero no se bloquea)
  • ser guardado con una codificación incorrecta

Aquí hay un pequeño script que reproduce esto, guardado en ISO-8859-15, junto con el seguimiento de la pila:
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]'}

Por supuesto, el archivo debería haberse guardado en el formato correcto, en primer lugar.

Pero lo ideal es que la sesión no se pierda y se emita un mensaje más informativo.

Comentario más útil

Cuento trece rastreos encadenados; creo que conseguir tantos sin usar la recursividad debería darte algún tipo de premio. ;-)

Todos 3 comentarios

Cuento trece rastreos encadenados; creo que conseguir tantos sin usar la recursividad debería darte algún tipo de premio. ;-)

9955 es una solución aproximada para esto; el error no es muy informativo, pero no bloquea IPython.

Si el nombre del archivo no es fácil de alcanzar, aquí está el comando que utilicé para localizar al culpable:

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

¿Fue útil esta página
0 / 5 - 0 calificaciones