Ipython: travar com arquivos python na codificação errada

Criado em 17 set. 2016  ·  3Comentários  ·  Fonte: ipython/ipython

%run ning um arquivo python marcado com # -*- coding: utf-8 -*- e salvo em um formato não utf8 pode travar o ipython (retornar ao shell).
Para obter a falha, o arquivo deve:

  • contém um caractere não-ascii
  • contém um erro (quando executado com python3, um rastreamento de pilha é gerado, mas sem travamento)
  • ser salvo com uma codificação errada

Aqui está um pequeno script reproduzindo isso, salvo em ISO-8859-15, junto com o rastreamento de pilha:
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]'}

Claro, o arquivo deveria ter sido salvo no formato correto, em primeiro lugar.

Mas, idealmente, a sessão não seria perdida e uma mensagem mais informativa seria emitida.

Comentários muito úteis

Conto treze rastreamentos encadeados - acho que conseguir tantos sem usar recursão deveria render algum tipo de prêmio. ;-)

Todos 3 comentários

Conto treze rastreamentos encadeados - acho que conseguir tantos sem usar recursão deveria render algum tipo de prêmio. ;-)

9955 é uma solução grosseira para isso; o erro não é muito informativo, mas não falha o IPython.

Se o nome do arquivo não for fácil de encontrar, aqui está o comando que usei para rastrear o culpado:

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

Esta página foi útil?
0 / 5 - 0 avaliações