Skip to content

Commit 06b1380

Browse files
author
Saeid Darvish
committed
l24: compeleted
1 parent e113a23 commit 06b1380

1 file changed

Lines changed: 8 additions & 8 deletions

File tree

lessons/l24.rst

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. role:: emoji-size
22

33
.. meta::
4-
:description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، مدیریت خطا در پایتون، raise Exception در پایتون، Warning در پایتون، Assertion پایتون
4+
:description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، مدیریت خطا در پایتون، raise Exception در پایتون، Warning در پایتون، Assertion پایتون, assert در پایتون
55
:keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, کتابخانه, پایتون, Exception در پایتون
66

77

@@ -15,7 +15,7 @@
1515
Photo by `Sandy Manoa <https://unsplash.com/photos/DnuC3-ZNBPQ>`__
1616

1717

18-
18+
این درس در ادامه درس پیش می‌باشد و به شرح مفاهیم باقی‌مانده پیرامون مفهوم Exception در زبان برنامه‌نویسی پایتون می‌پردازد. اینکه چگونه می‌توان با استفاده از دستور raise یک Exception را به صورت عمدی در برنامه بروز داد و همچنین چگونه می‌شود یک Exception در زبان برنامه‌نویسی پایتون ایجاد نماییم. در ادامه این درس به بررسی مفاهیم Warning و Assertion در زبان‌برنامه‌نویسی پایتون و نیز ارتباط آن‌ها با Exception می‌پردازد.
1919

2020

2121
توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین به منظور جلوگیری از پیچیدگی‌های غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه می‌شود.
@@ -36,7 +36,7 @@
3636
دستور ``raise``
3737
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3838

39-
از درس پیش با Exception آشنا شدیم و مشاهده کردیم در زمان اجرای برنامه پایتونی تمامی خطاها در قالب یک Exception اعلام می‌گردند. اما در برنامه‌نویسی زمان‌های بسیاری خواهد بود که برنامه‌نویس می‌بایست خود اقدام به بروز Exception نماید. یک ماژول در هنگام انجام کار مشخصی ممکن است با وضعیت‌های مختلفی روبرو گردد که می‌بایست این وضعیت‌ها را به ماژول سطح بالاتر خود اعلام کند تا در نهایت نتیجه و توضیح مناسب برای کاربر فراهم گردد. برای مثال در پیاده‌سازی API ماژولی که انجام خدمت را به عهده دارد، هنگامی که به خطا یا وضعیتی خاص برخورد می‌کند، می‌تواند این وضعیت را در قالب بروز یک Exception اعلام می‌کند و ماژولی که وظیفه تولید پاسخ یا Response را برعهده دارد، بر اساس نوع Exception رخ داده می‌تواند یک Response مناسب تولید نماید.
39+
از درس پیش با Exception آشنا شده‌ایم و مشاهده کردیم در زمان اجرای برنامه پایتونی (Runtime) تمامی خطاها در قالب یک Exception اعلام می‌گردند. اما در برنامه‌نویسی زمان‌های بسیاری خواهد بود که برنامه‌نویس می‌بایست خود اقدام به بروز Exception نماید. یک ماژول در هنگام انجام کار مشخصی ممکن است با وضعیت‌های مختلفی روبرو گردد که می‌بایست این وضعیت‌ها را به ماژول سطح بالاتر خود اعلام کند تا در نهایت نتیجه و توضیح مناسب برای کاربر فراهم گردد. برای مثال در پیاده‌سازی API ماژولی که انجام خدمت را به عهده دارد، هنگامی که به خطا یا وضعیتی خاص برخورد می‌کند، می‌تواند این وضعیت را در قالب بروز یک Exception اعلام کند و ماژولی که وظیفه تولید پاسخ یا Response را برعهده دارد، بر اساس نوع Exception رخ داده می‌تواند یک Response مناسب تولید نماید.
4040

4141
در زبان برنامه‌نویسی پایتون از دستور ``raise`` [`اسناد پایتون <https://docs.python.org/3/reference/simple_stmts.html#raise>`__] برای بروز یک Exception استفاده می‌گردد::
4242

@@ -94,7 +94,7 @@
9494
TypeError: The input must be 'int' type, 'C' is <class 'str'>
9595

9696

97-
طی درس پیش مشاهده کردیم، چنانچه در زمان handle کردن یک Exception، یک Exception دیگر رخ دهد؛ در نتیجه Traceback نهایی نیز شامل یک Traceback به ازای هر Exception خواهد بود. این امکان نیز توسط دستور ``raise`` برای برنامه‌نویس فراهم می‌باشد. می‌توان با استفاده از دستور ``from`` در کنار ``raise``، دو Exception - که از نظر منطقی به یکدیگر وابسته هستند - را به یکدیگر متصل و سپس raise کرد::
97+
طی درس پیش مشاهده کردیم، چنانچه در زمان handle کردن یک Exception، یک Exception دیگر رخ دهد؛ در نتیجه Traceback نهایی نیز شامل یک Traceback به ازای هر Exception خواهد بود. این امکان نیز توسط دستور ``raise`` برای برنامه‌نویس فراهم می‌باشد. می‌توان با استفاده از دستور ``from`` در کنار ``raise``، دو Exception را به یکدیگر متصل و سپس raise کرد::
9898

9999
raise exception_object from other_exception_object
100100

@@ -241,7 +241,7 @@
241241

242242
تا این لحظه با مفهوم Exception آشنا شده‌ایم. می‌دانیم که بروز Exception در واقع اعلام یک خطا یا یک رویداد مهم در برنامه می‌باشد که می‌بایست حتما handle شود، در غیر این صورت برنامه قادر به انجام دستورات نخواهد بود.
243243

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>`__].
245245

246246

247247
پیش از مراجعه به این ماژول از کتابخانه استاندارد زبان برنامه‌نویسی پایتون لازم است نگاهی دوباره به انتهای فهرست سلسله‌مراتب وراثت Exceptionها که در درس پیش آن را بررسی کردیم بیاندازیم، در انتهای این فهرست کلاس‌هایی با پسوند Warning قراردارند [`Exception hierarchy <https://docs.python.org/3/library/exceptions.html#exception-hierarchy>`__]:
@@ -276,7 +276,7 @@
276276
raise DeprecationWarning('"sum_int" will be removed in version 2.0')
277277
DeprecationWarning: "sum_int" will be removed in version 2.0
278278

279-
ساختار سلسله‌مراتب به ما گفته بود که Warningها در اصل Exception هستند و زمانی که یک Exception به اصطلاح raise شود، حتما می‌بایست یک handler برای آن پیش‌بینی شده باشد. در واقع اگر برای بروز یک Warning از دستور ``raise`` استفاده شود، دستور ``raise`` همان کاری را با Warning انجام می‌دهد که با هر نوع Exception دیگری انجام خواهد داد.
279+
ساختار سلسله‌مراتب به ما گفته بود که Warningها در اصل Exception هستند (وجود رابطه IS-A به دلیل وراثت - درس هجدهم) و زمانی که یک Exception به اصطلاح raise شود، حتما می‌بایست یک handler برای آن پیش‌بینی شده باشد. در واقع اگر برای بروز یک Warning از دستور ``raise`` استفاده شود، دستور ``raise`` همان کاری را با Warning انجام می‌دهد که با هر نوع Exception دیگری انجام خواهد داد.
280280

281281

282282
تابع ``warnings.warn``
@@ -533,7 +533,7 @@ Warnings Filter
533533
AssertionError
534534

535535

536-
فرض توسعه‌دهنده تابع ``average`` مثال قبل این بوده که به این تابع نباید داده‌ای با طول صفر ارسال نمی‌گردد، ولی اگر در زمان تست یا ادامه مراحل توسعه برنامه این مقدار ارسال گردد، باید یک فکری برای اصلاح آن کرد! چرا که این تابع آمادگی تبدیل شدن به یک باگ در برنامه را خواهد داشت.
536+
فرض توسعه‌دهنده تابع ``average`` مثال قبل این بوده که به این تابع داده‌ای با طول صفر ارسال نمی‌گردد، ولی اگر در زمان تست یا ادامه مراحل توسعه برنامه این مقدار ارسال گردد، باید یک فکری برای اصلاح آن کرد! چرا که این تابع آمادگی کافی برای تبدیل شدن به یک باگ در برنامه را دارد!
537537

538538
می‌توان برای دستور ``assert`` یک پیام خطا نیز اختصاص داد:
539539

@@ -558,7 +558,7 @@ Warnings Filter
558558
AssertionError: List[numbers] is empty.
559559

560560

561-
همانطور پیش‌تر بیان شده دستورهای ``assert`` یک قابلیت برای زمان توسعه می‌باشند بنابراین باید توجه داشت که تمامی این دستورات هنگامی که برنامه با کلید بهینه‌سازی (Optimization - درس چهارم) یعنی ``O-`` یا ``OO-`` اجرا گردد، در زمان کامپیال به بایت‌کد حذف خواهند شد::
561+
همانطور پیش‌تر بیان شده دستورهای ``assert`` یک قابلیت برای زمان توسعه می‌باشند بنابراین باید توجه داشت که تمامی این دستورات هنگامی که برنامه با کلید بهینه‌سازی (Optimization - درس چهارم) یعنی ``O-`` یا ``OO-`` اجرا گردد، در زمان کامپیال حذف و در بایت‌کد قرار نخواهند گرفت::
562562

563563
$ python -O script.py
564564

0 commit comments

Comments
 (0)