آموزش پایتون-آموزش استثناها در Python

سلام دوستان ...در قسمت قبل آموزش پایتون مفاهیم زیر را یاد دادیملینک قسمت اول آموزش پایتونآموزش خواندن و نوشتن فایل در زبان برنامه نویسی پایتونآموزش خطاها و استثناها در برنامه نویسی پایتونآموزش مدیریت استثناها در آموزش پایتونبا ادامه آموزش پایتون همراه ما باشید.آموزش اعلام استثناها در برنامه نویسی پایتونعبارت raise به برنامه نویس این امکان را می دهد تا یک استثنای خاص را مجبور به رخ دادن کند. برای مثال:>>> raise NameError('HiThere') Traceback (most recent call last): File &quot<stdin>&quot, line 1, in <module> NameError: HiThere</module></stdin>تنها آرگومان raise بیان می کند که استثنا اعلام شود. این یا باید یک نمونه استثنا (exception instance) باشد یا یک کلاس استثنا ( یک کلاس که از Exception مشتق شده باشد). اگر یک کلاس استثنا پاس شود، با فراخوانی سازنده آن بدون هیچ آرگومانی، به طور ضمنی نمونه گیری می شود.raise ValueError # shorthand for 'raise ValueError()'اگر باید تعیین کنید که آیا یک استثنا اعلام شده اما قصد مدیریت آن را ندارید، حالت ساده تری از عبارت raise به شما این امکان را می دهد تا استثنا را دوباره اعلام کنید.>>> try: ... raise NameError('HiThere') ... except NameError: ... print('An exception flew by!') ... raise ... An exception flew by! Traceback (most recent call last): File &quot<stdin>&quot, line 2, in <module> NameError: HiThere</module></stdin>آموزش استثناهای تعریف شده توسط کاربر در آموزش پایتونبرنامه ها ممکن است با ساخت یک کلاس جدید استثنا، خود برای استثناهای خود نام بگذارندمعمولا استثناها باید به طور مستقیم یا غیر مستقیم از کلاس Exception مشتق شوند.کلاس های استثنا را میتوان به گونه ای تعریف کرد که کارهایی که هر کلاس دیگری انجام می دهد را بتوانند انجام دهند، اما معمولا آنها را ساده می سازند. این کلاس ها اغلب فقط تعدادی ویژگی ارائه می کنند که امکان استخراج اطلاعات درباره خطا توسط اداره کننده خطا (handler) را فراهم می کند. در زمان ایجاد ماژولی که بتواند چندین خطای متمایز را اعلام کند، معمول است که یک کلاس پایه برای استثناهای تعریف شده توسط آن ماژول ایجاد کنند، و نیز زیر کلاسی برای ایجاد کلاس های استثنای خاص برای شرایط متفاوت خطا بسازند. class Error(Exception): &quot&quot&quotBase class for exceptions in this module.&quot&quot&quot pass class InputError(Error): &quot&quot&quotException raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error &quot&quot&quot def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): &quot&quot&quotRaised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed &quot&quot&quot def __init__(self, previous, next, message): self.previous = previous self.next = nextاکثر استثناها، مشابه نامگذاری استثناهای استاندارد، با نام هایی که به “Error” ختم می شود تعریف می شوند. بسیاری از ماژول های استاندارد به منظور گزارش خطاهایی که ممکن است در توابعی که خود تعریف کرده اند رخ دهد، استثناهای خود را تعریف می کنند.آموزش تعریف عملیات تمیزکاری در برنامه نویسی آموزش پایتونعبارت try یک بخش اختیاری دیگری نیز دارد که وظیفه آن تعریف عملیات تمیزکاری (clean-up actions) است که تحت هر شرایطی باید اجرا شوند. برای مثال:>>> try: ... raise KeyboardInterrupt ... finally: ... print('Goodbye, world!') ... Goodbye, world! KeyboardInterrupt Traceback (most recent call last): File &quot<stdin>&quot, line 2, in <module></module></stdin>اگر یک بخش finally وجود داشته باشد، این بخش finally به عنوان اخرین وظیفه قبل از تکمیل شدن عبارت try اجرا خواهد شد. بخش finally ، چه عبارت try، استثنایی تولید کند یا نکند، اجرا می شود. نکات زیر موارد پیچیده تری از زمانی که استثنا رخ می دهد را بیان می کند.اگر استثنایی در حین اجرای بخش try رخ دهد، استثنا ممکن است توسط بخش except اداره شود. اگر استثنا توسط بخش except اداره نشود، استثنا پس از اجرای بخش finally ، دوباره اعلام می شود.یک استثنا می تواند در حین اجرای یک بخش except یا else رخ دهد. مجددا، استثنا پس از اجرای بخش finally ، دوباره اعلام می شود.اگر عبارت try به یک عبارت break ، continue یا return برسد، بخش finally دقیقا قبل از اجرای عبارات break ، continue یا return اجرا می شود.اگر بخش finally شامل عبارت return باشد، مقدار بازگشت داده شده، از عبارت return بخش finally خواهد بود، نه مقداری که عبارت return بخش try باز می گرداند.برای مثال:>>> def bool_return():... try:... return True... finally:... return False...>>> bool_return()Falseیک مثال پیچیده تر:>>> def divide(x, y): ... try: ... result = x / y ... except ZeroDivisionError: ... print(&quotdivision by zero!&quot) ... else: ... print(&quotresult is&quot, result) ... finally: ... print(&quotexecuting finally clause&quot) ... >>> divide(2, 1) result is 2.0 executing finally clause >>> divide(2, 0) division by zero! executing finally clause >>> divide(&quot2&quot, &quot1&quot) executing finally clause Traceback (most recent call last): File &quot<stdin>&quot, line 1, in <module> File &quot<stdin>&quot, line 3, in divide TypeError: unsupported operand type(s) for /: 'str' and 'str'</stdin></module></stdin>همانطور که می بینید، بخش finally در هر شرایطی اجرا شده است. خطای TypeError که به واسطه تقسیم دو رشته بر هم اعلام شده است، توسط بخش except اداره نشده است، بنابراین پس از اجرای بخش finally دوباره اعلام می شود. در برنامه های دنیای واقعی، استفاده از بخش finally برای آزادسازی منابع خارجی (مانند فایل ها یا ارتباطات شبکه) مفید است، صرف نظر از اینکه آیا استفاده از منبع موفقیت آمیز بوده است.آموزش عملیات تمیزکاری از قبل تعریف شده در برنامه نویسی پایتونبرخی از اشیا عملیات تمیزکاری استانداردی را تعریف می کنند که در زمانی که شی، دیگر مورد نیاز نیست انجام شوند، صرف نظر از اینکه عملیاتی که از آن شی استفاده می کرد موفق بود یا شکست خورد. مثال زیر را ببینید، که می خواهد یک فایل را باز کند و محتویات آن را روی صفحه نمایش چاپ کند.for line in open(&quotmyfile.txt&quot):print(line, end=&quot&quot)مشکل این کد این است که، برای مدت زمان نامعلومی پس از اتمام اجرای این بخش، فایل را باز می گذارد. در کدهای ساده این مسئله ای نیست، اما برای برنامه های بزرگتر می تواند یک مشکل باشد. عبارت with این تضمین را می دهد تا اشیایی مانند فایل ها به گونه ای مورد استفاده قرار گیرند که همیشه فورا و به طور صحیحی تمیز شوند.with open(&quotmyfile.txt&quot) as f:for line in f: print(line, end=&quot&quot)پس از اجرای این عبارت، فایل f همیشه بسته می شود، حتی اگر در حین پردازش خطوط با مشکلی مواجه شود. اشیایی (مانند فایل ها) که عملیات تمیزکاری از پیش تعریف شده را ارائه می کنند، آن را در مستندات خود توضیح می دهند.دوره آموزش پایتون ادامه دارد