مدیریت استثنا در پایتون – به زبان ساده


در این مطلب، چگونگی مدیریت استثنا در پایتون با استفاده از عبارات except ،try و finally آموزش داده شده است. این قابلیت به کاربران امکان نوشتن کدهای تمیز، خوانا و کارا را در پایتون میدهد.
مدیریت استثنا در پایتون
پایتون دارای استثناهای توکار متعددی است که در صورتی که چیزی اشتباه باشد، برنامه را مجبور به نمایش خطا میکنند. هنگامی که این استثناها به وقوع میپیوندند، موجب میشوند که فرایند اجرای برنامه متوقف شود و به فراخوانی فرایند تا جایی که مشکل حل شود، ارجاع داده شود. در صورتی که خطاها و استثناها مدیریت نشوند، برنامه با مشکل و خطا مواجه خواهد شد.
برای مثال، فرض میشود که تابع A، تابع B را فراخوانی میکند و تابع B متعاقبا تابع C را فراخوانی میکند. اگر یک استثنا در تابع C به وقوع بپیوندد و در C مدیریت نشود، به B و سپس به A پاس داده میشود. اگر هیچ وقت مدیریت نشوند، یک پیغام خطا صادر میشود و برنامه دچار یک توقف غیر منتظره میشود. در ادامه به چگونگی کشف و مدیریت استثنا در پایتون پرداخته شده است.
کشف و مدیریت استثنا در پایتون
مدیریت استثنا در پایتون با استفاده از دستور try قابل انجام است. یک عملیات حیاتی که منجر به وقوع استثنا میشود، درون شرط try قرار گرفته است و کدی که استثناها را مدیریت میکند، در یک شرط استثنا نوشته میشود. این به کاربر بستگی دارد که پس از پیدا شدن استثنا، چه عملیاتی را انجام دهد.
در ادامه، مثال سادهای از این مورد آورده شده است.
خروجی قطعه کد بالا در ادامه آمده است.
The entry is a Oops! <class 'ValueError'> occured. Next entry. The entry is 0 Oops! <class 'ZeroDivisionError' > occured. Next entry. The entry is 2 The reciprocal of 2 is 0.5
در این برنامه، تا هنگامی که کاربر یک عدد صحیح را که دارای تقابل معتبر است وارد نکند، حلقه ادامه پیدا میکند. بخشی که منجر به استثنا میشود را درون بلوک try قرار میدهد. اگر هیچ استثنائی به وقوع نپیوندد، بلوک except رها میشود و جریان نرمال ادامه پیدا میکند. اما اگر استثنائی به وقوع بپیوندد، توسط بلوک except گرفته (Catch) میشود. در اینجا، نام استثنا با استفاده از تابع ()ex_info درون ماژول sys پرینت میشود و از کاربر خواسته میشود که مجددا تلاش کند. میتوان مشاهده کرد که مقادیر «a» و «۱٫۳» منجر به خطای ValueError و «0» منجر به ZeroDivisionError میشود.
گرفتن استثناهای خاص در پایتون
در مثال بالا، هیچ استثنائی در شرط except مشخص نشده است. این کد، یک کد خوب محسوب نمیشود و همه استثناها را گرفته و هر مورد را به شیوهای مشابه مدیریت میکند. کاربر میتواند تعیین کند که شرط except کدام استثناها را به دام میاندازد و در واقع، Catch میکند.
یک شرط try میتواند هر تعداد شرط برای مدیریت کردن آنها به صورت جدا جدا داشته باشد، اما در صورت وقوع استثناها، تنها یکی اجرا میشود. میتوان از «تاپل» (Tuple) مقادیر برای تعیین استثناها در شرط except استفاده کرد.
یک شرط try میتواند هر تعداد except برای مدیریت آنها به طور متفاوت داشته باشد، اما فقط در صورت وقوع استثنا یکی از آنها اجرا میشود. میتوان از یک تاپل از مقادیر برای تعیین کردن استثناها در یک شرط except استفاده کرد. در ادامه، شبه کد این مثال، آورده شده است.
نمایش استثناها در پایتون
در برنامهنویسی پایتون، استثناها هنگامی به وقوع میپیوندند که خطاهای مرتبط در هنگام اجرا به وقوع بپیوندند؛ اما میتوان آن را قویا با استفاده از کلیدواژه raise نمایش داد.
همچنین، میتوان به طور دلخواه یک مقدار را به یک استثنا پاس داد تا مشخص شود چرا آن استثنا به وقوع پیوسته است.
try...finally در پایتون
دستور try در پایتون، میتواند دارای یک شرط اختیاری finally باشد. این شرط در هر حال اتفاق میافتد و به طور کلی برای آزاد کردن منابع اضافی مورد استفاده قرار میگیرد. برای مثال، کاربر ممکن است به یک «مرکز داده» (Data Center) از راه دور (Remote Data Center) از طریق شبکه یا کار کردن با رابط کاربری گرافیکی (Graphical User Interface | GUI) متصل شده باشد. در کلیه شرایط، باید منابعی که یکبار استفاده شدهاند را چه عملیات موفق بوده باشد و چه نباشد، پاک کرد. این اقدامات (بستن یک فایل یا قطع کردن اتصال از شبکه) در شرط نهایی به وقوع میپیوندند تا استثنا را تضمین کنند.
در ادامه، مثالی از عملیات فایل برای نمایش دادن این مورد، ارائه شده است.
این نوع از ساخت، این اطمینان را فراهم میکند که فایل بسته شده است، حتی اگر استثنائی به وقوع بپیوندد.