|
8 | 8 | درس ۲۴: مدیریت خطا در پایتون: Warning ،raise Exception و Assertion |
9 | 9 | =================================================================================================== |
10 | 10 |
|
11 | | -.. figure:: /_static/pages/24-python--raise-exception-warning-assertion.jpg |
| 11 | +.. figure:: /_static/pages/24-python-raise-exception-warning-assertion.jpg |
12 | 12 | :align: center |
13 | 13 | :alt: مدیریت خطا در پایتون:Warning ،raise Exception و Assertion |
14 | 14 |
|
|
36 | 36 | دستور ``raise`` |
37 | 37 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
38 | 38 |
|
| 39 | +از درس پیش با Exception آشنا شدیم و مشاهده کردیم در زمان اجرای برنامه پایتونی تمامی خطاها در قالب یک Exception اعلام میگردند. اما در برنامهنویسی زمانهای بسیاری خواهد بود که برنامهنویس میبایست خود اقدام به بروز Exception نماید. یک ماژول در هنگام انجام کار مشخصی ممکن است با وضعیتهای مختلفی روبرو گردد که میبایست این وضعیتها را به ماژول سطح بالاتر خود اعلام کند تا در نهایت نتیجه و توضیح مناسب برای کاربر فراهم گردد. برای مثال در پیادهسازی API ماژولی که انجام خدمت را به عهده دارد، هنگامی که به خطا یا وضعیتی خاص برخورد میکند، میتواند این وضعیت را در قالب بروز یک Exception اعلام میکند و ماژولی که وظیفه تولید پاسخ یا Response را برعهده دارد، بر اساس نوع Exception رخ داده میتواند یک Response مناسب تولید نماید. |
| 40 | + |
| 41 | +در زبان برنامهنویسی پایتون از دستور ``raise`` [`اسناد پایتون <https://docs.python.org/3/reference/simple_stmts.html#raise>`__] برای بروز یک Exception استفاده میگردد:: |
| 42 | + |
| 43 | + raise Exception() # an exception object |
| 44 | + |
| 45 | + |
| 46 | +.. code-block:: python |
| 47 | + :linenos: |
| 48 | + |
| 49 | + def self_sum_int(a): |
| 50 | + if not isinstance(a, int): |
| 51 | + raise TypeError() |
| 52 | + |
| 53 | + return a + a |
| 54 | +
|
| 55 | + res = self_sum_int('C') |
| 56 | + print(res) |
| 57 | +
|
| 58 | +
|
| 59 | +:: |
| 60 | + |
| 61 | + Traceback (most recent call last): |
| 62 | + File "sample.py", line 7, in <module> |
| 63 | + res = self_sum_int('C') |
| 64 | + File "sample.py", line 3, in self_sum_int |
| 65 | + raise TypeError() |
| 66 | + TypeError |
| 67 | + |
| 68 | +در نمونه کد بالا ما یک شی از کلاس ``TypeError`` ایجاد و آن را raise کردیم (سطر ۳). همانطور که مشاهده میکنید، شرح Exception در Traceback (سطر پایانی) با آن چیزی که در درس پیش شاهد آن بودیم، متفاوت است و همچنین علت بروز Exception نیز raise شدن آن اعلام شده است. |
| 69 | + |
| 70 | +میتوان در هنگام نمونهسازی از کلاس Exception مورد نظر، یک متن دلخواه (یک شی از نوع ``str``) به عنوان شرح Exception در زمان نمونهسازی به صورت آرگومان ارسال کنیم: |
| 71 | + |
| 72 | + |
| 73 | +.. code-block:: python |
| 74 | + :linenos: |
| 75 | + |
| 76 | + def self_sum_int(a): |
| 77 | + if not isinstance(a, int): |
| 78 | + raise TypeError(f"The input must be 'int' type, {a!r} is {type(a)}") |
| 79 | + |
| 80 | + return a + a |
| 81 | +
|
| 82 | + res = self_sum_int('C') |
| 83 | + print(res) |
| 84 | +
|
| 85 | +
|
| 86 | +:: |
| 87 | + |
| 88 | + Traceback (most recent call last): |
| 89 | + File "sample.py", line 7, in <module> |
| 90 | + res = self_sum_int('C') |
| 91 | + File "sample.py", line 3, in self_sum_int |
| 92 | + raise TypeError(f'The input must be of the integer type, {a} is {type(a)}') |
| 93 | + TypeError: The input must be 'int' type, 'C' is <class 'str'> |
| 94 | + |
| 95 | + |
39 | 96 |
|
40 | 97 | ایجاد Exception |
41 | 98 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
0 commit comments