Ipython: تحطم مع ملفات بيثون في ترميز خاطئ

تم إنشاؤها على ١٧ سبتمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: ipython/ipython

%run ning ملف بيثون تم تمييزه بعلامة # -*- coding: utf-8 -*- وحفظه بتنسيق غير utf8 يمكن أن يؤدي إلى تعطل ipython (العودة إلى shell).
للحصول على التعطل ، يجب أن يكون الملف:

  • تحتوي على حرف غير أسكي
  • تحتوي على خطأ (عند التشغيل باستخدام python3 ، يتم إنشاء تتبع مكدس ، ولكن بدون تعطل)
  • يتم حفظها بترميز خاطئ

هنا نص صغير يعيد إنتاج هذا ، محفوظ في ISO-8859-15 ، مع تتبع المكدس:
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]'}

بالطبع ، كان يجب حفظ الملف بالتنسيق الصحيح ، في المقام الأول.

ولكن من الناحية المثالية لن تضيع الجلسة ، وسيتم إصدار رسالة أكثر إفادة.

التعليق الأكثر فائدة

أحصي ثلاثة عشر تتبعًا متسلسلًا - أعتقد أن الحصول على هذا العدد الكبير دون استخدام العودية يجب أن يمنحك نوعًا من الجوائز. ؛-)

ال 3 كومينتر

أحصي ثلاثة عشر تتبعًا متسلسلًا - أعتقد أن الحصول على هذا العدد الكبير دون استخدام العودية يجب أن يمنحك نوعًا من الجوائز. ؛-)

9955 هو حل تقريبي لهذا ؛ الخطأ ليس مفيدًا للغاية ، لكنه لا يتلف IPython.

إذا لم يكن من السهل الوصول إلى اسم الملف ، فإليك الأمر الذي استخدمته لتعقب الجاني:

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات