Skip to content

Commit 1c16d61

Browse files
author
Saeid Darvish
committed
l23: Exception Hierarchy
1 parent 6329783 commit 1c16d61

2 files changed

Lines changed: 40 additions & 12 deletions

File tree

30.9 KB
Loading

lessons/l23.rst

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919

2020

21+
2122
توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین به منظور جلوگیری از پیچیدگی‌های غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه می‌شود.
2223

2324

@@ -390,18 +391,6 @@
390391

391392
چنانچه از چندین دستور ``except`` بهره می‌گیرید باید توجه داشته باشید که دستور ``except`` کلی یا همان expression-less except - در صورت وجود - می‌بایست به عنوان آخرین دستور ``except`` قرار بگیرد، در غیر این صورت دیگر دستورهای ``except`` که نوع Exception در آن‌ها مشخص شده است، فرصت اجرا پیدا نخواهند کرد.
392393

393-
.. tip::
394-
395-
دو دستور ``except`` زیر از نظر مفسر پایتون به عنوان یک handler برای تمام انواع Exceptionها می‌باشند و تنها تفاوت آن‌ها در امکان دریافت شی Exception می‌باشد:
396-
397-
::
398-
399-
except:
400-
401-
::
402-
403-
except Exception as error:
404-
405394
.. tip::
406395

407396
به صورت کلی دستور ``try`` پایتون فاقد یک حوزه یا Scope مجزا می‌باشد، بنابراین تمامی متغیرهایی که در بدنه دستور ``try`` تعریف می‌گردند جزیی از حوزه بیرونی خود هستند و در تمام بخش‌های داخل آن حوزه در دسترس خواهند بود. البته نباید فراموش کرد که اگر در هنگام انتساب به نام یک متغیر خطایی رخ داده باشد، بدیهی است که آن متغیر ایجاد نشده و اساسا در دسترس نیز نخواهد بود.
@@ -706,6 +695,45 @@
706695
Exception Hierarchy
707696
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
708697

698+
در زبان برنامه‌نویسی پایتون تمامی Exceptionها در قالب کلاس‌هایی در یک سلسله مراتب از وراثت ارايه شده است. برای مشاهده این کلاس‌ها و ساختار وراثت می‌توانید به اسناد پایتون مراجعه نمایید:‌ `Exception hierarchy <https://docs.python.org/3/library/exceptions.html#exception-hierarchy/>`__ - این ساختار توسط تصویر پایین نمایش داده شده است:
699+
700+
701+
.. image:: /_static/123-python-exception-hierarchy.png
702+
:align: center
703+
:alt: Exception Hierarchy در پایتون
704+
705+
کلاس ``BaseException`` در بالاترین سطح وراثت برای این دست کلاس‌ها قرار دارد و تمامی Exceptionها به صورت مستقیم یا غیر مستقیم از آن ارث‌بری دارند. از این بین تنها چهار کلاس هستند که مستقیم از ``BaseException`` ارث‌بری دارند:
706+
707+
* کلاس ``SystemExit`` [`اسناد پایتون <https://docs.python.org/3/library/exceptions.html#SystemExit>`__]: هرگاه به برنامه پایتونی با اراده برنامه‌نویس و با استفاده از تابع ``exit`` از ماژول ``sys`` [`اسناد پایتون <https://docs.python.org/3/library/sys.html#sys.exit>`__] فرمان توقف صادر شود، این Exception رخ خواهد داد.
708+
709+
* کلاس ``KeyboardInterrupt`` [`اسناد پایتون <https://docs.python.org/3/library/exceptions.html#KeyboardInterrupt>`__]: هرگاه با استفاده از صفحه‌کلید (Keyboard) اقدام به توقف ناگهانی برنامه پایتون نماییم - معمولا با استفاده از کلیدهای ترکیبی:‌ ``Control+C``، این Exception رخ خواهد داد.
710+
711+
* کلاس ``GeneratorExit`` [`اسناد پایتون <https://docs.python.org/3/library/exceptions.html#GeneratorExit>`__]: این Exception در زمانی که یک Generator (درس سیزدهم) بسته (Close) می‌شود [`اسناد پایتون <https://docs.python.org/3/reference/expressions.html#generator.close>`__]، رخ می‌دهد.
712+
713+
* کلاس ``Exception`` [`اسناد پایتون <https://docs.python.org/3/library/exceptions.html#Exception>`__]: می‌توان این‌گونه شرح داد که این کلاس، supperclass تمام Exceptionها به غیر از سه مورد قبلی است!
714+
715+
716+
717+
.. tip::
718+
719+
زمانی که یک نوع Exception در دستور ``except`` ذکر می‌گردد، آن دستور ``except`` به عنوان یک handler برای آن نوع Exception و تمامی subclassهایی خواهد بود که از آن Exception ارث‌بری دارند.
720+
721+
722+
.. tip::
723+
724+
دو دستور ``except`` زیر معادل یکدیگر بوده و از نظر مفسر پایتون به عنوان یک handler برای تمام انواع Exceptionها می‌باشند و تنها تفاوت آن‌ها در امکان دریافت شی Exception می‌باشد. برای ایجاد یک handler برای ``KeyboardInterrupt`` ،``SystemExit`` و ``GeneratorExit`` یا می‌بایست نام آن‌ها به صورت مستقیم در ``except`` قرار داده شود یا یکی از فرم‌های پایین از دستور ``except`` را استفاده نماییم:
725+
726+
::
727+
728+
except:
729+
730+
::
731+
732+
except BaseException as error:
733+
734+
735+
در واقع ``BaseException`` نوع Exception پیش‌فرض برای دستور ``except`` می‌باشد.
736+
709737

710738

711739
|

0 commit comments

Comments
 (0)