16.1. الوضع التفاعلي #
16.1.1. معالجة الأخطاء #
عند حدوث خطأ، يطبع المفسّر رسالة خطأ وتتبعًا للمكدس. في الوضع التفاعلي، يعود المفسّر إلى الموجّه الرئيسي؛ عندما يأتي المُدخل من ملف، يخرج بحالة خروج غير صفرية بعد طباعة تتبع المكدس. (الاستثناءات التي تُعالجها عبارة except في جملة try ليست أخطاءً في هذا السياق). بعض الأخطاء قاتلة بلا قيد أو شرط وتتسبب في خروج بحالة خروج غير صفرية؛ وهذا ينطبق على التناقضات الداخلية وبعض حالات نفاد الذاكرة. تُكتب جميع رسائل الخطأ في مسار الخطأ القياسي؛ ويُكتب الناتج العادي للأوامر المُنفّذة إلى الناتج القياسي.
يؤدي كتابة حرف المقاطعة (عادةً Control-C أو Delete) في الموجّه الرئيسي أو الثانوي إلى إلغاء المُدخلات والعودة إلى الموجّه الرئيسي. كتابة مقاطعة أثناء تنفيذ أمر ما يُثير استثناء KeyboardInterrupt، والذي يُمكن معالجته باستخدام جملة try.
16.1.2. سكربتات بايثون القابلة للتنفيذ #
على أنظمة يونكس الشبيهة بـ BSD، يمكن جعل سكربتات بايثون قابلة للتنفيذ مباشرةً، مثل سكربتات shell، وذلك بوضع السطر
#!/usr/bin/env python3.5
(بافتراض أن المُفسّر موجود على مسار المستخدم) في بداية السكربت، مع منح الملف وضعًا تنفيذيًا. يجب أن يكون #! أول حرفين من الملف. في بعض الأنظمة، يجب أن ينتهي هذا السطر الأول بنهاية سطر يونكس (‘\n’)، وليس بنهاية سطر ويندوز (‘\r\n’). تجدر الإشارة إلى أن رمز التجزئة، أو الباوند، ‘#’، يُستخدم لبدء التعليق في بايثون.
يمكن منح السكربت وضعًا تنفيذيًا، أو إذنًا، باستخدام الأمر chmod.
$ chmod +x myscript.py
في أنظمة ويندوز، لا يوجد مفهوم “وضع تنفيذي”. يقوم مُثبّت بايثون تلقائيًا بربط ملفات .py بملف python.exe، مما يعني أن النقر المزدوج على ملف بايثون سيؤدي إلى تشغيله كبرنامج نصي. يمكن أن يكون الامتداد أيضًا .pyw، وفي هذه الحالة، يتم إخفاء نافذة وحدة التحكم التي تظهر عادةً.
16.1.3. ملف بدء التشغيل التفاعلي #
عند استخدام بايثون تفاعليًا، من المفيد غالبًا تنفيذ بعض الأوامر القياسية في كل مرة يتم فيها تشغيل المُفسّر. يمكنك القيام بذلك عن طريق تعيين مُتغيّر بيئة باسم PYTHONSTARTUP إلى اسم ملف يحتوي على أوامر بدء التشغيل. يُشبه هذا ميزة .profile في واجهات يونكس.
يُقرأ هذا الملف فقط في الجلسات التفاعلية، وليس عندما يقرأ بايثون أوامر من برنامج نصي، وليس عندما يكون /dev/tty مصدرًا صريحًا للأوامر (والذي يعمل عادةً كجلسة تفاعلية). يُنفّذ في نفس مساحة الاسم التي تُنفّذ فيها الأوامر التفاعلية، بحيث يُمكن استخدام الكائنات التي يُعرّفها أو يستوردها دون أي قيود في الجلسة التفاعلية. يمكنك أيضًا تغيير الموجهين sys.ps1 وsys.ps2 في هذا الملف.
إذا كنت ترغب في قراءة ملف بدء تشغيل إضافي من المجلد الحالي، يمكنك برمجة ذلك في ملف بدء التشغيل العام باستخدام شيفرة مثل if os.path.isfile(‘.pythonrc.py’): exec(open(‘.pythonrc.py’).read()). إذا كنت ترغب في استخدام ملف بدء التشغيل في نص برمجي، فيجب عليك القيام بذلك صراحةً في النص البرمجي:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
with open(filename) as fobj:
startup_file = fobj.read()
exec(startup_file)
16.1.4. وحدات التخصيص #
يوفر بايثون أداتين لتخصيصه: sitecustomize وusercustomize. لمعرفة كيفية عملها، عليك أولاً تحديد موقع مجلد حزم موقع المستخدم. شغّل بايثون وشغّل الكود التالي:
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.5/site-packages'
يمكنك الآن إنشاء ملف باسم usercustomize.py في هذا المجلد ووضع أي شيء تريده فيه. سيؤثر هذا على كل استدعاء لبايثون، إلا إذا تم تشغيله باستخدام الخيار -s لتعطيل الاستيراد التلقائي.
يعمل sitecustomize بالطريقة نفسها، ولكن عادةً ما يُنشئه مسؤول جهاز الكمبيوتر في مجلد حزم الموقع العام، ويتم استيراده قبل usercustomize. راجع وثائق وحدة الموقع لمزيد من التفاصيل.