در بخشهای قبلی، به طور غیرمستقیم با مفهوم 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 بسیار موثر و حیاتی است، به ویژه زمانی که ورودیها از سمت کاربر ممکن است اشتباه باشند و برنامه باید به صورت امن و بدون توقف کامل اجرا شود.