You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l24.rst
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
.. role:: emoji-size
2
2
3
3
.. meta::
4
-
:description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، مدیریت خطا در پایتون، raise Exception در پایتون، Warning در پایتون، Assertion پایتون
4
+
:description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، مدیریت خطا در پایتون، raise Exception در پایتون، Warning در پایتون، Assertion پایتون, assert در پایتون
5
5
:keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, کتابخانه, پایتون, Exception در پایتون
6
6
7
7
@@ -15,7 +15,7 @@
15
15
Photo by `Sandy Manoa <https://unsplash.com/photos/DnuC3-ZNBPQ>`__
16
16
17
17
18
-
18
+
این درس در ادامه درس پیش میباشد و به شرح مفاهیم باقیمانده پیرامون مفهوم Exception در زبان برنامهنویسی پایتون میپردازد. اینکه چگونه میتوان با استفاده از دستور raise یک Exception را به صورت عمدی در برنامه بروز داد و همچنین چگونه میشود یک Exception در زبان برنامهنویسی پایتون ایجاد نماییم. در ادامه این درس به بررسی مفاهیم Warning و Assertion در زبانبرنامهنویسی پایتون و نیز ارتباط آنها با Exception میپردازد.
19
19
20
20
21
21
توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین به منظور جلوگیری از پیچیدگیهای غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه میشود.
@@ -36,7 +36,7 @@
36
36
دستور ``raise``
37
37
~~~~~~~~~~~~~~~~~~~~~~~~~~~
38
38
39
-
از درس پیش با Exception آشنا شدیم و مشاهده کردیم در زمان اجرای برنامه پایتونی تمامی خطاها در قالب یک Exception اعلام میگردند. اما در برنامهنویسی زمانهای بسیاری خواهد بود که برنامهنویس میبایست خود اقدام به بروز Exception نماید. یک ماژول در هنگام انجام کار مشخصی ممکن است با وضعیتهای مختلفی روبرو گردد که میبایست این وضعیتها را به ماژول سطح بالاتر خود اعلام کند تا در نهایت نتیجه و توضیح مناسب برای کاربر فراهم گردد. برای مثال در پیادهسازی API ماژولی که انجام خدمت را به عهده دارد، هنگامی که به خطا یا وضعیتی خاص برخورد میکند، میتواند این وضعیت را در قالب بروز یک Exception اعلام میکند و ماژولی که وظیفه تولید پاسخ یا Response را برعهده دارد، بر اساس نوع Exception رخ داده میتواند یک Response مناسب تولید نماید.
39
+
از درس پیش با Exception آشنا شدهایم و مشاهده کردیم در زمان اجرای برنامه پایتونی (Runtime) تمامی خطاها در قالب یک Exception اعلام میگردند. اما در برنامهنویسی زمانهای بسیاری خواهد بود که برنامهنویس میبایست خود اقدام به بروز Exception نماید. یک ماژول در هنگام انجام کار مشخصی ممکن است با وضعیتهای مختلفی روبرو گردد که میبایست این وضعیتها را به ماژول سطح بالاتر خود اعلام کند تا در نهایت نتیجه و توضیح مناسب برای کاربر فراهم گردد. برای مثال در پیادهسازی API ماژولی که انجام خدمت را به عهده دارد، هنگامی که به خطا یا وضعیتی خاص برخورد میکند، میتواند این وضعیت را در قالب بروز یک Exception اعلام کند و ماژولی که وظیفه تولید پاسخ یا Response را برعهده دارد، بر اساس نوع Exception رخ داده میتواند یک Response مناسب تولید نماید.
40
40
41
41
در زبان برنامهنویسی پایتون از دستور ``raise`` [`اسناد پایتون <https://docs.python.org/3/reference/simple_stmts.html#raise>`__] برای بروز یک Exception استفاده میگردد::
42
42
@@ -94,7 +94,7 @@
94
94
TypeError: The input must be 'int' type, 'C' is <class 'str'>
95
95
96
96
97
-
طی درس پیش مشاهده کردیم، چنانچه در زمان handle کردن یک Exception، یک Exception دیگر رخ دهد؛ در نتیجه Traceback نهایی نیز شامل یک Traceback به ازای هر Exception خواهد بود. این امکان نیز توسط دستور ``raise`` برای برنامهنویس فراهم میباشد. میتوان با استفاده از دستور ``from`` در کنار ``raise``، دو Exception - که از نظر منطقی به یکدیگر وابسته هستند - را به یکدیگر متصل و سپس raise کرد::
97
+
طی درس پیش مشاهده کردیم، چنانچه در زمان handle کردن یک Exception، یک Exception دیگر رخ دهد؛ در نتیجه Traceback نهایی نیز شامل یک Traceback به ازای هر Exception خواهد بود. این امکان نیز توسط دستور ``raise`` برای برنامهنویس فراهم میباشد. میتوان با استفاده از دستور ``from`` در کنار ``raise``، دو Exception را به یکدیگر متصل و سپس raise کرد::
98
98
99
99
raise exception_object from other_exception_object
100
100
@@ -241,7 +241,7 @@
241
241
242
242
تا این لحظه با مفهوم Exception آشنا شدهایم. میدانیم که بروز Exception در واقع اعلام یک خطا یا یک رویداد مهم در برنامه میباشد که میبایست حتما handle شود، در غیر این صورت برنامه قادر به انجام دستورات نخواهد بود.
243
243
244
-
اما گاهی اعلام یک رویداد آنقدر مهم نیست که بخواهد روند اجرای برنامه تهدید کند. بلکه صرفا یک هشدار برای توجه بیشتر یا اصلاح رفتار برای نسخههای بعدی خواهد بود که **بیشتر کاربرد آن برای توسعهدهندگان برنامه میباشد تا کاربرانی که به نوعی مصرفکنندگان آن برنامه محسوب میشوند**. در زبان برنامهنویسی پایتون، ماژول ``warnings`` [`اسناد پایتون <https://docs.python.org/3/library/warnings.html>`__] را برای استفاده در چنین زمانهایی فراهم آورده شده است [`PEP 230 <https://www.python.org/dev/peps/pep-0230>`__].
244
+
اما گاهی اعلام یک رویداد آنقدر مهم نیست که بخواهد روند اجرای برنامه را تهدید کند. بلکه صرفا یک هشدار برای توجه بیشتر یا اصلاح رفتار برای نسخههای بعدی خواهد بود که **بیشتر کاربرد آن برای توسعهدهندگان برنامه میباشد تا کاربرانی که به نوعی مصرفکنندگان آن برنامه محسوب میشوند**. در زبان برنامهنویسی پایتون، ماژول ``warnings`` [`اسناد پایتون <https://docs.python.org/3/library/warnings.html>`__] برای استفاده در چنین زمانهایی فراهم آورده شده است [`PEP 230 <https://www.python.org/dev/peps/pep-0230>`__].
245
245
246
246
247
247
پیش از مراجعه به این ماژول از کتابخانه استاندارد زبان برنامهنویسی پایتون لازم است نگاهی دوباره به انتهای فهرست سلسلهمراتب وراثت Exceptionها که در درس پیش آن را بررسی کردیم بیاندازیم، در انتهای این فهرست کلاسهایی با پسوند Warning قراردارند [`Exception hierarchy <https://docs.python.org/3/library/exceptions.html#exception-hierarchy>`__]:
@@ -276,7 +276,7 @@
276
276
raise DeprecationWarning('"sum_int" will be removed in version 2.0')
277
277
DeprecationWarning: "sum_int" will be removed in version 2.0
278
278
279
-
ساختار سلسلهمراتب به ما گفته بود که Warningها در اصل Exception هستند و زمانی که یک Exception به اصطلاح raise شود، حتما میبایست یک handler برای آن پیشبینی شده باشد. در واقع اگر برای بروز یک Warning از دستور ``raise`` استفاده شود، دستور ``raise`` همان کاری را با Warning انجام میدهد که با هر نوع Exception دیگری انجام خواهد داد.
279
+
ساختار سلسلهمراتب به ما گفته بود که Warningها در اصل Exception هستند (وجود رابطه IS-A به دلیل وراثت - درس هجدهم) و زمانی که یک Exception به اصطلاح raise شود، حتما میبایست یک handler برای آن پیشبینی شده باشد. در واقع اگر برای بروز یک Warning از دستور ``raise`` استفاده شود، دستور ``raise`` همان کاری را با Warning انجام میدهد که با هر نوع Exception دیگری انجام خواهد داد.
280
280
281
281
282
282
تابع ``warnings.warn``
@@ -533,7 +533,7 @@ Warnings Filter
533
533
AssertionError
534
534
535
535
536
-
فرض توسعهدهنده تابع ``average`` مثال قبل این بوده که به این تابع نباید دادهای با طول صفر ارسال نمیگردد، ولی اگر در زمان تست یا ادامه مراحل توسعه برنامه این مقدار ارسال گردد، باید یک فکری برای اصلاح آن کرد! چرا که این تابع آمادگی تبدیل شدن به یک باگ در برنامه را خواهد داشت.
536
+
فرض توسعهدهنده تابع ``average`` مثال قبل این بوده که به این تابع دادهای با طول صفر ارسال نمیگردد، ولی اگر در زمان تست یا ادامه مراحل توسعه برنامه این مقدار ارسال گردد، باید یک فکری برای اصلاح آن کرد! چرا که این تابع آمادگی کافی برای تبدیل شدن به یک باگ در برنامه را دارد!
537
537
538
538
میتوان برای دستور ``assert`` یک پیام خطا نیز اختصاص داد:
539
539
@@ -558,7 +558,7 @@ Warnings Filter
558
558
AssertionError: List[numbers] is empty.
559
559
560
560
561
-
همانطور پیشتر بیان شده دستورهای ``assert`` یک قابلیت برای زمان توسعه میباشند بنابراین باید توجه داشت که تمامی این دستورات هنگامی که برنامه با کلید بهینهسازی (Optimization - درس چهارم) یعنی ``O-`` یا ``OO-`` اجرا گردد، در زمان کامپیال به بایتکد حذف خواهند شد::
561
+
همانطور پیشتر بیان شده دستورهای ``assert`` یک قابلیت برای زمان توسعه میباشند بنابراین باید توجه داشت که تمامی این دستورات هنگامی که برنامه با کلید بهینهسازی (Optimization - درس چهارم) یعنی ``O-`` یا ``OO-`` اجرا گردد، در زمان کامپیال حذف و در بایتکد قرار نخواهند گرفت::
0 commit comments