مدیریت خطا و استثناها در پایتون
در برنامهنویسی، خطاها و استثناها (Exceptions) امری اجتنابناپذیر هستند. پایتون ابزارهایی را برای مدیریت این خطاها و استثناها فراهم کرده است تا برنامه بهطور صحیح و بدون توقف اجرا شود. این ویژگی به برنامهنویسان کمک میکند تا از مشکلات احتمالی جلوگیری کرده و رفتار مناسبی برای شرایط خطا در نظر بگیرند.
۱. مفهوم استثنا (Exception)
استثناها وضعیتهایی هستند که بهطور معمول بهدلیل خطاهای پیشبینینشده در زمان اجرای برنامه رخ میدهند. زمانی که یک خطای غیرمنتظره در حین اجرای برنامه اتفاق میافتد، یک استثنا ایجاد میشود که میتواند باعث توقف برنامه شود، مگر اینکه آن را مدیریت کنیم.
۲. بلوکهای try, except, else, و finally
پایتون از بلوکهای try, except, else, و finally برای مدیریت استثناها استفاده میکند.
- try: در این بخش، کدهایی که ممکن است خطا ایجاد کنند قرار میگیرند.
- except: در این بخش، کدهایی که در صورت وقوع خطا اجرا میشوند، نوشته میشود.
- else: در صورتی که هیچ خطایی در بخش try رخ ندهد، کدهای داخل else اجرا میشوند.
- finally: این بلوک همیشه اجرا میشود، چه خطا رخ دهد چه نه. معمولاً برای پاکسازی منابع مانند فایلها و اتصالات استفاده میشود.
۳. مثال ساده از استفاده از try و except
x = 10 / 0 # تقسیم بر صفر (خطا)
except ZeroDivisionError:
print("خطا: تقسیم بر صفر!")
در این مثال، خطای تقسیم بر صفر اتفاق میافتد، اما بهجای توقف برنامه، پیام خطا چاپ میشود.
۴. استفاده از else
اگر کد در داخل بلوک try بهدرستی اجرا شود و خطایی رخ ندهد، بلوک else اجرا میشود.
x = 10 / 2 # هیچ خطایی رخ نمیدهد
except ZeroDivisionError:
print("خطا: تقسیم بر صفر!")
else:
print("عملیات با موفقیت انجام شد!")
خروجی:
۵. استفاده از finally
بلوک finally همیشه اجرا میشود، حتی اگر خطایی در بلوک try رخ دهد یا نشود. معمولاً از آن برای انجام عملیات پاکسازی استفاده میشود.
f = open("file.txt", "r")
data = f.read()
except FileNotFoundError:
print("فایل پیدا نشد!")
else:
print("فایل با موفقیت باز شد.")
finally:
print("بلاک finally همیشه اجرا میشود.")
f.close()
۶. گرفتن انواع مختلف خطاها
در پایتون، میتوان چندین نوع خطا را در بلوکهای except مختلف مدیریت کرد. برای اینکار میتوان از چندین except استفاده کرد.
x = int(input("یک عدد وارد کنید: "))
y = 10 / x
except ValueError:
print("خطا: ورودی باید یک عدد باشد!")
except ZeroDivisionError:
print("خطا: تقسیم بر صفر!")
۷. ایجاد استثناهای سفارشی
پایتون این امکان را فراهم میکند که خودمان استثناهای سفارشی تعریف کنیم. برای این کار از کلمهکلیدی raise استفاده میشود.
pass
try:
raise CustomError("این یک استثنای سفارشی است!")
except CustomError as e:
print(f"خطا: {e}")
۸. استفاده از assert برای بررسی شرایط
کلمهکلیدی assert برای بررسی صحت فرضیات استفاده میشود. اگر شرط درون assert درست نباشد، یک استثنا به نام AssertionError رخ میدهد.
assert x > 10, "x باید بزرگتر از 10 باشد!" # این شرط خطا ایجاد میکند
خروجی:
۹. استثناهای متداول در پایتون
پایتون دارای مجموعهای از استثناهای پیشساخته است که میتوانند در برنامهها مورد استفاده قرار گیرند:
- ZeroDivisionError: زمانی که تقسیم بر صفر رخ دهد.
- FileNotFoundError: زمانی که فایل مورد نظر پیدا نشود.
- ValueError: زمانی که یک مقدار نامناسب به یک تابع داده شود.
- IndexError: زمانی که دسترسی به اندیس غیرمجاز یک لیست یا رشته صورت گیرد.
- KeyError: زمانی که کلید غیرمجاز در یک دیکشنری استفاده شود.
- TypeError: زمانی که عملیاتی بر روی نوع داده نادرست انجام شود.
۱۰. جمعبندی
مدیریت خطا و استثناها در پایتون ابزاری مهم برای افزایش پایداری و جلوگیری از توقف ناگهانی برنامه است. با استفاده از بلوکهای try, except, else و finally میتوانیم بهطور مؤثر به خطاها واکنش نشان دهیم و از بروز مشکلات در اجرای برنامه جلوگیری کنیم.
