در بخشهای قبلی، به طور غیرمستقیم با مفهوم exception یا استثناها آشنا شدهاید. این وضعیت زمانی رخ میدهد که عملکرد برنامه به دلیل ورودی نادرست یا شرایط غیرمنتظره متوقف شود. در چنین حالتی، برنامه به همراه پیغام خطا متوقف میشود. مثال زیر نحوه بروز یک استثنا هنگام تقسیم عددی بر صفر را نشان میدهد:
num1 = 7
num2 = 0
print(num1 / num2)
خروجی:
ZeroDivisionError: division by zero
استثناها در موقعیتهای مختلفی ممکن است رخ دهند. برخی از رایجترین آنها عبارتند از:
- ImportError: زمانی که وارد کردن یک ماژول به اشتباه انجام شود.
- IndexError: زمانی که اندیس استفاده شده برای دسترسی به یک لیست خارج از محدوده باشد.
- NameError: استفاده از متغیری که تعریف نشده است.
- SyntaxError: وجود خطا در نحو کد.
- TypeError: استفاده نادرست از نوع دادهها در توابع یا عملیاتها.
- ValueError: زمانی که مقدار ورودی با نوع درست اما مقدار نامناسب باشد.
برای مدیریت استثناها و جلوگیری از توقف ناگهانی برنامه، از ساختار try/except استفاده میشود. در این ساختار، کدهایی که ممکن است خطا ایجاد کنند در بلوک try قرار میگیرند. اگر استثنایی رخ دهد، اجرای کد در try متوقف شده و بلوک except اجرا میشود. در غیر این صورت، بلوک except نادیده گرفته میشود. به مثال زیر توجه کنید:
try:
num1 = 7
num2 = 0
print(num1 / num2)
print("Done calculation")
except ZeroDivisionError:
print("An error occurred")
print("due to zero division")
خروجی:
An error occurred
due to zero division
نکته: در مثال بالا، نوع استثنا در بلوک except مشخص شده است. یک بلوک try میتواند چندین بلوک except برای مدیریت استثناهای مختلف داشته باشد. همچنین میتوان چند نوع استثنا را به صورت گروهی در یک بلوک except تعریف کرد، مانند مثال زیر:
try:
variable = 10
print(variable + "hello")
print(variable / 2)
except ZeroDivisionError:
print("Divided by zero")
except (ValueError, TypeError):
print("Error occurred")
خروجی:
Error occurred
همچنین میتوان از یک بلوک except بدون مشخص کردن نوع استثنا استفاده کرد، اما این روش به دلیل پنهان کردن خطاهای برنامهنویسی به ندرت توصیه میشود. مثال زیر را ببینید:
try:
word = "spam"
print(word / 0)
except:
print("An error occurred")
خروجی:
An error occurred
نکته مهم: استفاده از exception handling بسیار موثر و حیاتی است، به ویژه زمانی که ورودیها از سمت کاربر ممکن است اشتباه باشند و برنامه باید به صورت امن و بدون توقف کامل اجرا شود.