مدیریت خطاها در پایتون
در این بخش به بررسی مدیریت خطاها در پایتون می پردازیم، مدیریت خطاها یک فرآیند مهم در برنامه نویسی است که به شما امکان میدهد با خطاهایی که در اجرای برنامه شما رخ میدهند مقابله کنید.
با استفاده از مکانیزم مدیریت خطاها، میتوانید برنامههای خود را بهبود ببخشید و امنیت آن را نیز افزایش بدهید.
در پایتون، مدیریت خطاها با استفاده از بلاک try-except انجام میشود. بلاک try-except به شما اجازه میدهد بخشی از کد خود را در یک بلاک try قرار داده و در صورت رخ دادن خطا، آن را با استفاده از بلاک except کنترل کنید و عملیات مناسبی را برای مدیریت آن انجام دهید.
بلاک try
به شما اجازه میدهد یک بلاک کد را برای بررسی خطاها تست کنید.
بلاک except
به شما اجازه میدهد با خطا برخورد کنید و آن را مدیریت کنید.
بلاک else
به شما امکان میدهد کدی را اجرا کنید که در صورت بروز خطا اجرا نشده است.
بلاک finally
به شما اجازه میدهد کدی را اجرا کنید، بدون توجه به نتیجه بلاک try و except.
مدیریت استثناء (Exception Handling)
مدیریت استثناء یا Exception Handling در پایتون، فرآیندی است که به شما اجازه میدهد با خطاها و استثنائاتی که در حین اجرای برنامه رخ میدهند برخورد کنید. در هنگام اجرای برنامه، ممکن است با مواردی مانند خطاهای نامعتبر، خطاهای دسترسی به فایل، خطاهای عملیاتی و غیره روبرو شوید. این خطاها ممکن است منجر به ناپایداری برنامه و توقف غیرمنتظره آن شوند. برای مقابله با این خطاها و جلوگیری از توقف ناخواسته برنامه، از مدیریت استثناء استفاده میشود.
در پایتون، مدیریت استثناء با استفاده از بلاک try-except انجام میشود. بلاک try شامل بخشی از کد است که ممکن است خطا بوجود آورد. در صورتی که در اجرای بلاک try خطا رخ دهد، کنترل برنامه به بلاک except منتقل میشود. بلاک except حاوی کدی است که برای مدیریت خطا و انجام عملیات مناسب در صورت بروز خطا استفاده میشود.
یک بلاک try میتواند یک یا چند بلاک except داشته باشد. هر بلاک except به صورت جداگانه میتواند خطاهای خاص را تشخیص داده و به آنها پاسخ دهد. در بلاک except، میتوانید کدی بنویسید که با خطا برخورد کرده و عملیات مناسبی مانند چاپ پیام خطا، ثبت خطا در یک فایل، بازگرداندن مقدار پیشفرض و غیره را انجام دهد.
مثال
در اینجا بلاک try یک استثناء ایجاد میکند، زیرا x تعریف نشده است.
خروجی:
An exception occurred
از آنجا که بلاک try یک خطا را ایجاد میکند، بلاک except اجرا خواهد شد.
بدون وجود بلاک try، برنامه به خطا برخورد کرده و یک خطا را برمیگرداند.
مثال
در اینجا ما سعی می کنیم مقدار متغیر x را که تعریف نشده است چاپ کنیم:
print(x)
خروجی یک خطا چیزی شبیه به این خواهد بود:
Traceback (most recent call last):
File "demo_try_except_error.py", line 3, in
print(x)
NameError: name 'x' is not defined
استثناءهای متعدد
شما میتوانید تعداد دلخواهی بلاک استثناء تعریف کنید، به عنوان مثال اگر میخواهید برای یک نوع خاص از خطا یک بلاک کد خاص را اجرا کنید.
مثال
در این مثال اگر بلاک try یک NameError را ایجاد کند، یک پیام خاص و برای سایر خطاها پیام دیگری را چاپ می کنیم:
خروجی:
Variable x is not defined
بلاک else
همچنین می توانید بلاک else
را تعریف کنید که اگر هیچ خطایی ایجاد نشد این بلاک اجرا شود.
مثال
در این مثال، بلاک try هیچ خطایی ایجاد نمیکند:
خروجی:
Hello
Nothing went wrong
بلاک finally
بلاک finally، در صورت تعیین، بدون توجه به اینکه بلاک try یک خطا ایجاد کند یا نکند، اجرا خواهد شد.
مثال
در اینجا بلاک finally در هر صورت اجرا خواهد شد:
خروجی:
Something went wrong
The 'try except' is finished
بلاک finally برای بستن object ها و پاکسازی منابع می تواند مفید باشد.
مثال
در این مثال تلاش می کنیم داخل فایلی که قابل نوشتن نیست (محدودیت دارد) یک متن را بنویسیم:
خروجی:
Something went wrong when writing to the file
ایجاد یک استثناء
در پایتون، کلمه کلیدی `raise` برای ایجاد و پرتاب یک استثناء (exception) استفاده میشود. با استفاده از `raise` میتوانید یک استثناء را به صورت دستی ایجاد کرده و آن را در جریان اجرای برنامه پرتاب کنید.
توجه: مفهوم پرتاب کردن یک استثناء در برنامهنویسی، به معنای ایجاد و اعلام وقوع یک خطا یا استثناء در جریان اجرای برنامه است. وقوع یک خطا یا استثناء به معنای این است که برنامه به یک وضعیت ناخواسته و نامطلوب برخورد کرده است که نیاز به بررسی و مدیریت آن دارد.
زمانی که `raise` با یک نوع استثناء همراه شود، برنامه به سطح بالاتری از کد میرود و در جستجوی بلاک `try-except` مناسب برای مدیریت استثناء میگردد. در صورتی که یک استثناء به بلاک `except` متناظر باشد، عملیات مدیریت خطا انجام میشود. در غیر این صورت، برنامه با خطایی مانند `UnhandledException` متوقف خواهد شد.
استفاده از `raise` به شما امکان میدهد استثناءهای مخصوص خود را ایجاد کرده و در جریان اجرای برنامه، براساس شرایط خاص، آنها را پرتاب کنید.
مثال
در این مثال اگر مقدار x کمتر از صفر باشد، یک خطا (error) را ایجاد و برنامه را متوقف می کنیم.
خروجی:
Traceback (most recent call last):
File "demo_ref_keyword_raise.py", line 4, in
raise Exception("Sorry, no numbers below zero")
Exception: Sorry, no numbers below zero
مثال
در صورتی که x یک عدد صحیح نباشد، یک خطای نوع (TypeError) را ایجاد می کنیم:
خروجی:
Traceback (most recent call last):
File "demo_ref_keyword_raise2.py", line 4, in
raise TypeError("Only integers are allowed")
TypeError: Only integers are allowed
آیا این مطلب برای شما مفید بود ؟