منابع ترجمه · The Python Tutorial · فصل ۱۶

پیوست (آموزش رسمی پایتون، فصل ۱۶)

۴ دقیقه مطالعه · به‌روزرسانی ۳ آبان ۱۴۰۵

منبع اصلی: The Python Tutorial, Chapter 16: Appendix — Python Software Foundation

💡 این صفحه مثل یک نوت‌بوک Jupyter است: متغیر و تابعی که در یک سلول تعریف شود، در سلول‌های بعدی همین صفحه در دسترس است. سلول‌ها را به ترتیب اجرا کنید، یا با «⏮ تا اینجا» همهٔ سلول‌های قبلیِ اجرانشده را یک‌جا اجرا کنید.

۱۶٫۱. حالت تعاملی

دو گونه از REPL تعاملی وجود دارد. مفسر پایهٔ کلاسیک در همهٔ پلتفرم‌هایی که حداقل قابلیت‌های کنترل خط را دارند پشتیبانی می‌شود.

از پایتون ۳٫۱۳ به بعد، به‌طور پیش‌فرض یک shell تعاملی جدید استفاده می‌شود. این shell از رنگ، ویرایش چندخطی، مرور تاریخچه و حالت چسباندن (paste mode) پشتیبانی می‌کند. برای غیرفعال کردن رنگ، کنترل رنگ را ببینید. کلیدهای تابعی قابلیت‌های بیشتری فراهم می‌کنند. کلید F1 وارد مرورگر راهنمای تعاملی pydoc می‌شود. کلید F2 امکان مرور تاریخچهٔ خط فرمان را بدون خروجی و بدون اعلان‌های >>> و ... می‌دهد. کلید F3 وارد «حالت چسباندن» می‌شود که چسباندن بلوک‌های بزرگ‌تر کد را آسان‌تر می‌کند. برای بازگشت به اعلان معمولی دوباره F3 را بزنید.

هنگام استفاده از shell تعاملی جدید، با تایپ exit یا quit از آن خارج شوید. افزودن پرانتزهای فراخوانی بعد از این دستورها لازم نیست.

اگر shell تعاملی جدید را نمی‌خواهید، می‌توان آن را با متغیر محیطی PYTHON_BASIC_REPL غیرفعال کرد.

۱۶٫۱٫۱. مدیریت خطا

وقتی خطایی رخ می‌دهد، مفسر یک پیام خطا و یک ردیاب پشته (stack trace) چاپ می‌کند. در حالت تعاملی سپس به اعلان اصلی برمی‌گردد؛ وقتی ورودی از یک فایل آمده باشد، پس از چاپ ردیاب پشته با وضعیت خروج غیرصفر خارج می‌شود. (استثناهایی که توسط یک بند except در دستور try مدیریت می‌شوند، در این زمینه خطا محسوب نمی‌شوند.) برخی خطاها بی‌قید و شرط مهلک‌اند و باعث خروج با وضعیت غیرصفر می‌شوند؛ این برای ناسازگاری‌های داخلی و برخی موارد تمام شدن حافظه صادق است. همهٔ پیام‌های خطا در جریان خطای استاندارد نوشته می‌شوند؛ خروجی عادی دستورهای اجراشده در خروجی استاندارد نوشته می‌شود.

تایپ نویسهٔ وقفه (معمولاً Control-C یا Delete) در اعلان اصلی یا ثانویه ورودی را لغو می‌کند و به اعلان اصلی برمی‌گردد. ^۱ تایپ وقفه در حین اجرای یک دستور، استثنای KeyboardInterrupt را پرتاب می‌کند که می‌توان آن را با دستور try مدیریت کرد.

۱۶٫۱٫۲. اسکریپت‌های اجرایی پایتون

در سیستم‌های یونیکس شبیه BSD، اسکریپت‌های پایتون را می‌توان مانند اسکریپت‌های shell مستقیماً اجرایی کرد، با قرار دادن خط

#!/usr/bin/env python3

(با فرض اینکه مفسر در PATH کاربر باشد) در ابتدای اسکریپت و دادن حالت اجرایی به فایل. #! باید دو نویسهٔ اول فایل باشد. در برخی پلتفرم‌ها این خط اول باید به پایان خط به سبک یونیکس ('\n') ختم شود، نه پایان خط ویندوز ('\r\n'). توجه کنید که نویسهٔ هش یا پوند، '#'، در پایتون برای شروع توضیح (comment) به کار می‌رود.

می‌توان با دستور chmod به اسکریپت حالت یا مجوز اجرایی داد.

$ chmod +x myscript.py

در سیستم‌های ویندوز مفهومی به نام «حالت اجرایی» وجود ندارد. نصب‌کنندهٔ پایتون به‌طور خودکار فایل‌های .py را با python.exe مرتبط می‌کند، بنابراین دوبار کلیک روی یک فایل پایتون آن را به‌عنوان اسکریپت اجرا می‌کند. پسوند می‌تواند .pyw هم باشد؛ در این حالت پنجرهٔ کنسول که معمولاً ظاهر می‌شود سرکوب می‌گردد.

۱۶٫۱٫۳. فایل راه‌اندازی تعاملی

وقتی از پایتون به‌صورت تعاملی استفاده می‌کنید، اغلب خوب است که برخی دستورهای استاندارد هر بار که مفسر راه‌اندازی می‌شود اجرا شوند. می‌توانید این کار را با تنظیم یک متغیر محیطی به نام PYTHONSTARTUP روی نام فایلی که دستورهای راه‌اندازی شما را دارد انجام دهید. این شبیه قابلیت .profile در shellهای یونیکس است.

این فایل فقط در نشست‌های تعاملی خوانده می‌شود، نه وقتی پایتون دستورها را از یک اسکریپت می‌خواند، و نه وقتی /dev/tty به‌صراحت به‌عنوان منبع دستورها داده شده باشد (که در غیر این صورت مانند نشست تعاملی رفتار می‌کند). این فایل در همان فضای نامی اجرا می‌شود که دستورهای تعاملی در آن اجرا می‌شوند، به‌طوری که اشیایی که تعریف یا import می‌کند در نشست تعاملی بدون پیشوند قابل‌استفاده‌اند. همچنین می‌توانید اعلان‌های 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)

۱۶٫۱٫۴. ماژول‌های سفارشی‌سازی

پایتون دو قلاب (hook) برای سفارشی‌سازی ارائه می‌دهد: sitecustomize و usercustomize. برای دیدن کارکرد آن، ابتدا باید محل پوشهٔ site-packages کاربر خود را بیابید. پایتون را اجرا کنید و این کد را وارد کنید:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.x/site-packages'

حالا می‌توانید در آن پوشه فایلی به نام usercustomize.py بسازید و هر چه می‌خواهید در آن بگذارید. این فایل بر هر بار اجرای پایتون اثر می‌گذارد، مگر اینکه با گزینهٔ -s برای غیرفعال کردن import خودکار راه‌اندازی شود.

sitecustomize به همان شیوه کار می‌کند، اما معمولاً توسط مدیر کامپیوتر در پوشهٔ site-packages سراسری ساخته می‌شود و پیش از usercustomize import می‌شود. برای جزئیات بیشتر مستندات ماژول site را ببینید.


پانویس

۱. مشکلی در بستهٔ GNU Readline ممکن است مانع این کار شود.