|
18 | 18 |
|
19 | 19 |
|
20 | 20 |
|
| 21 | + |
21 | 22 | توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین به منظور جلوگیری از پیچیدگیهای غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه میشود. |
22 | 23 |
|
23 | 24 |
|
|
390 | 391 |
|
391 | 392 | چنانچه از چندین دستور ``except`` بهره میگیرید باید توجه داشته باشید که دستور ``except`` کلی یا همان expression-less except - در صورت وجود - میبایست به عنوان آخرین دستور ``except`` قرار بگیرد، در غیر این صورت دیگر دستورهای ``except`` که نوع Exception در آنها مشخص شده است، فرصت اجرا پیدا نخواهند کرد. |
392 | 393 |
|
393 | | -.. tip:: |
394 | | - |
395 | | - دو دستور ``except`` زیر از نظر مفسر پایتون به عنوان یک handler برای تمام انواع Exceptionها میباشند و تنها تفاوت آنها در امکان دریافت شی Exception میباشد: |
396 | | - |
397 | | - :: |
398 | | - |
399 | | - except: |
400 | | - |
401 | | - :: |
402 | | - |
403 | | - except Exception as error: |
404 | | - |
405 | 394 | .. tip:: |
406 | 395 |
|
407 | 396 | به صورت کلی دستور ``try`` پایتون فاقد یک حوزه یا Scope مجزا میباشد، بنابراین تمامی متغیرهایی که در بدنه دستور ``try`` تعریف میگردند جزیی از حوزه بیرونی خود هستند و در تمام بخشهای داخل آن حوزه در دسترس خواهند بود. البته نباید فراموش کرد که اگر در هنگام انتساب به نام یک متغیر خطایی رخ داده باشد، بدیهی است که آن متغیر ایجاد نشده و اساسا در دسترس نیز نخواهد بود. |
|
706 | 695 | Exception Hierarchy |
707 | 696 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
708 | 697 |
|
| 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 | + |
709 | 737 |
|
710 | 738 |
|
711 | 739 | | |
|
0 commit comments