Ipython: crash dengan file python dalam penyandian yang salah

Dibuat pada 17 Sep 2016  ·  3Komentar  ·  Sumber: ipython/ipython

%run ning file python ditandai dengan # -*- coding: utf-8 -*- dan disimpan dalam format non-utf8 dapat crash ipython (kembali ke shell).
Untuk mendapatkan crash, file harus:

  • mengandung karakter non-ascii
  • mengandung kesalahan (saat dijalankan dengan python3, jejak tumpukan dihasilkan, tetapi tidak ada kerusakan)
  • disimpan dengan penyandian yang salah

Berikut adalah skrip kecil yang mereproduksi ini, disimpan dalam ISO-8859-15, bersama dengan jejak tumpukan:
file.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]'}

Tentu saja, file tersebut seharusnya disimpan dalam format yang benar.

Tapi idealnya sesi tidak akan hilang, dan pesan yang lebih informatif akan dikeluarkan.

Komentar yang paling membantu

Saya menghitung tiga belas traceback berantai - Saya pikir mendapatkan sebanyak itu tanpa menggunakan rekursi akan memberi Anda semacam hadiah. ;-)

Semua 3 komentar

Saya menghitung tiga belas traceback berantai - Saya pikir mendapatkan sebanyak itu tanpa menggunakan rekursi akan memberi Anda semacam hadiah. ;-)

9955 adalah perbaikan kasar untuk ini; kesalahannya tidak terlalu informatif, tetapi tidak merusak IPython.

Jika nama file tidak mudah dijangkau, maka berikut adalah perintah yang saya gunakan untuk melacak pelakunya:

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat