مدیریت استثناها (Exception Handling) در پایتون با try-except
در هنگام برنامهنویسی، حتی باتجربهترین توسعهدهندگان نیز دچار خطا میشوند. خطاهای برنامهنویسی به طور کلی به دو دسته خطاهای منطقی (Logic Errors) و خطاهای زمان اجرا (Run-time Errors) تقسیم میشوند. خطاهای زمان اجرا که به آنها استثنا (Exception) گفته میشود، باعث متوقف شدن ناگهانی برنامه و نمایش پیام خطا میشوند. برای جلوگیری از این مشکل و مدیریت خطاهای پیشبینینشده، زبان پایتون مکانیزم قدرتمندی به نام مدیریت استثناها با استفاده از بلوکهای try-except را در اختیار ما قرار میدهد. در این مقاله از پای شو، به بررسی نحوه مدیریت خطاها در پایتون میپردازیم.
استثنا (Exception) چیست؟
استثنا رویدادی است که در هنگام اجرای برنامه رخ میدهد و روند عادی اجرای دستورات را متوقف میکند. برای مثال، اگر بخواهید عددی را بر صفر تقسیم کنید یا فایلی را باز کنید که وجود خارجی ندارد، پایتون یک استثنا ایجاد میکند.
نمونهای از یک خطای زمان اجرا (تقسیم بر صفر):
x = 10 / 0
# خروجی: ZeroDivisionError: division by zero
این خطا باعث کرش کردن و متوقف شدن کل برنامه میشود. هدف از مدیریت استثناها این است که به جای متوقف شدن برنامه، خطا را کنترل کرده و پیام مناسبی به کاربر نمایش دهیم یا روند جایگزینی را اجرا کنیم.
استفاده از بلوک try-except
پایهایترین روش برای جلوگیری از متوقف شدن برنامه، قرار دادن کد مشکوک به خطا داخل بلوک try و مدیریت خطای احتمالی در بلوک except است.
try:
# کدهایی که احتمال بروز خطا در آنها وجود دارد
number = int(input("لطفا یک عدد وارد کنید: "))
result = 100 / number
print("نتیجه تقسیم:", result)
except:
# کدهایی که در صورت بروز هرگونه خطا اجرا میشوند
print("خطایی رخ داده است! لطفا مقادیر معتبر وارد کنید.")
در این مثال، اگر کاربر حرفی به جای عدد وارد کند یا عدد صفر را وارد نماید، برنامه متوقف نشده و به جای آن پیام داخل بلوک except چاپ میشود.
مدیریت خطاهای خاص (Specific Exceptions)
استفاده از except خالی (بدون مشخص کردن نوع خطا) معمولاً توصیه نمیشود؛ چون تمام خطاهای برنامه را پنهان میکند (حتی خطاهایی که انتظارشان را نداریم). بهترین روش این است که نوع خطای مورد نظر خود را جلوی کلمه کلیدی except بنویسیم:
try:
num1 = int(input("عدد اول: "))
num2 = int(input("عدد دوم: "))
res = num1 / num2
print("خروجی:", res)
except ZeroDivisionError:
print("خطا: تقسیم بر صفر امکانپذیر نیست!")
except ValueError:
print("خطا: لطفا فقط عدد وارد کنید!")
با این روش، هر نوع خطا با پیام اختصاصی و دقیق خودش مدیریت میشود.
استفاده از بلوکهای else و finally
در ساختار مدیریت استثناها در پایتون، دو بلوک اختیاری دیگر به نامهای else و finally نیز وجود دارند:
-
بلوک else: اگر در بلوک
tryهیچ خطایی رخ ندهد، کدهای داخل بلوکelseاجرا میشوند. -
بلوک finally: این بلوک در هر صورت (چه خطا رخ بدهد و چه رخ ندهد) اجرا میشود و معمولاً برای کارهایی مثل بستن فایلها یا اتصال به دیتابیس کاربرد دارد.
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("فایل مورد نظر یافت نشد!")
else:
print("فایل با موفقیت خوانده شد.")
file.close()
finally:
print("این بخش همیشه و در انتها اجرا میشود.")
ایجاد خطای دلخواه با کلمه کلیدی raise
گاهی اوقات ممکن است شرایطی در برنامه پیش بیاید که از نظر پایتون خطا نباشد، اما از نظر منطق کسبوکار شما یک خطا محسوب شود. در این حالت میتوانید با استفاده از دستور raise به صورت دستی یک استثنا ایجاد کنید:
def set_age(age):
if age < 0 or age > 120:
raise ValueError("سن وارد شده نامعتبر است!")
print("سن ثبت شد:", age)
try:
set_age(150)
except ValueError as e:
print("خطای سفارشی:", e)
جمعبندی
مدیریت صحیح خطاها یکی از ویژگیهای اصلی برنامهنویسان حرفهای است. با استفاده از ساختار try-except که در این مقاله از سایت پای شو بررسی کردیم، میتوانید از کرش کردن برنامههای پایتون جلوگیری کرده، خطاهای زمان اجرا را به شکلی ایمن کنترل کنید و تجربه کاربری بهتری برای مخاطبان برنامههای خود فراهم سازید.

بدون دیدگاه