کنترل خطا (Exceptions) در پایتون

خطا و مدیریت Exceptions

خطا معمولا در کدهای مشکل‌دار رخ می‌دهند و باعث خروج از برنامه می‌شوند. بنابراین باید خطاها را بشناسیم و برایشان راه‌حل در نظر بگیریم. به عنوان مثال اگر انتظار متغیری از نوع عدد صحیح داریم و متغیر متنی به تابع مورد نظر داده می‌شود، TypeError خواهیم داشت. جهت مدیریت Exceptions از سه دستور اصلی try، except و fainally می‌توان استفاده کرد.

try: برنامه یا قسمتی از برنامه که می‌بایست از نظر خطا مورد بررسی قرار گیرد، در آن قرار می‌گیرد.

except: وقتی خطا در قسمت try اتفاق می‌افتد، به این بخش وارد می‌شویم. یعنی برنامه‌ایی است که در زمان وقوع خطا، در برنامه اصلی اجرا می‌شود.

finally: بلوکی از برنامه که چه خطا رخ دهد چه ندهد می‌بایست اجرا گردد.

 

نحوه استفاده از try و except در هنگام رخ دادن خطا

برای بررسی خطا، در کد زیر یک تابعی را تعریف کرده‌ایم که دو عدد آرگومان را می‌گیرد و مجموع این دو عدد را برمی‌گرداند. اگر یکی از این آرگومان‌ها را به صورت تابع input() یک ورودی از user بگیریم، به دلیل اینکه تابع input ورودی را به صورت string برمی‌گرداند، با TypeError مواجه می‌شویم.

ایجاد خطا در پایتون

 

برای جلوگیری از نمایش این خطا از دستورات try و except استفاده می‌کنیم.  به این صورت که اگر کدی که در بلوک try قرار دارد خطا داد. دستور except را اجرا می‌شود، اگر نه دستور else را اجرا می‌شود.

کنترل خطا با try و except

 

در کد زیر برای جلوگیری از نمایش خطا از دستور try و except استفاده کرده و به جای خطا می‌بینیم که عبارت مقابل print چاپ می‌شود.

مدیریت exceptions و خطا ها

 

از دستور except در مدیریت Exceptins می‌توان چندین بار استفاده کرد. همچنین در مقابل دستور except می‌توان انواع خطا که امکان دارد رخ دهد را نوشت.

مدیریت خطا با try و except و finally

با توجه به مدیریت Exceptions، در کد فوق ابتدا بدنه مربوط به try اجرا می‌شود. اگر خطا رخ ندهد که کد اجرا می‌شود و سپس وارد بدنه finally می‌شود. اما اگر یکی از خطا های فوق رخ دهد. کد وارد بدنه except آن خطا شده و عملیات مربوط به آن بدنه اجرا می‌شود. در نهایت چه خطا رخ دهد و چه خطا رخ ندهد بدنه دستور finally اجرا می‌شود.

مدیریت Exceptions در لوپ‌ها

در صورتیکه در لوپ‌ها خطا رخ بدهد، بالافاصله کد از لوپ خارج می‌شود. در مدیریت Exceptions برای جلوگیری از خارج شدن از یک لوپ می‌توان از دستورات try و except استفاده کرد.

مدیریت Exceptions در حلقه ها

در کد زیر لوپ while در صورتی که با خطا مواجه شد دیگر متوقف نمی‌شود و دستور except اجرا می‌شود و دوباره به دلیل دستور continue به ابتدای while خواهد رفت. اگر با خطا نیز مواجه نشد دستور else اجرا می‌شود و به دلیل وجود break از لوپ while خارج می‌شویم. دستور finally هم چه با خطا مواجه بشویم چه نشویم اجرا خواهد شد.

مدیریت Exceptions در لوپ ها

در کد فوق، ابتدا بدنه try اجرا می‌شود. اگر عدد، به ورودی داده شود خطا رخ نمی‌دهد و بدنه else اجرا می‌شود. سپس از آنجایی که در بدنه else دستور break استفاده شده است، از لوپ خارج می‌شویم. اما اگر خطا رخ دهد وارد بدنه except شده. و چون از دستور continue استفاده شده است پس از آنگه عبارت not a number چاپ شد. ادامه کد اجرا نمی‌شود و دوباره به اول لوپ برمی‌گردد. این روند ادامه پیدا می‌کند تا ورودی درست به input داده شود.

تمرین خطا و exception

در کد زیر به دلیل اینکه نوع داده ورودی برای عملیات به توان رساندن string می‌باشد، و مناسب این عملیات نیست با خطای TypeError مواجه می‌شویم. در این صورت با مدیریت Exceptions  و با دستور except می‌توان به جای موجه شدن با خطا نوع خطا را چاپ کرد.

تمرین مدیریت Exceptins و خطا

 

در کد زیر به دلیل اینکه متغیر x بر صفر تقسیم می‌شود با خطا ZeroDivisionError مواجه می‌شویم. در این صورت با دستور except می‌توان به جای مواجه شدن با خطا نوع خطا را چاپ کرد.

کنترل خطا و مدیریت Exceptions

 

در کد زیر به دلیل اینکه مقدار را به تابع input به جای integer به صورت string داده‌ایم با خطا ValueError مواجه می‌شویم. در این صورت با مدیریت Exceptions می‌توان با دستور except به جای مواجه شدن با خطا، نوع خطا را چاپ کرد.  با استفاده از continue در بلوک except خط‌های بعد از آن run نمی‌شود و دوباره کد به ابتدای while می‌رود و بلوک داخل try دوباره تکرار می‌شود. اگر با خطا مواجه نشدیم، قسمت else اجرا می‌شود. که در اینجا به دلیل وجود دستور break کد از لوپ خارج می‌شود.

کنترل خطا و مدیریت Exceptions در لوپ‌ها

 

برای آشنایی بیشتر با مباحث خطا و مدیریت Exceptions و نحوه کار با آن‌ها می‌توانید به دوره جامع آموزش زبان برنامه‌نویسی پایتون  آکادمی رسا مراجعه کنید.

0/5 (0 Reviews)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست