exception و exception handeling

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/03
  • تعداد بازدید: 317

در قسمت های گذشته با exception ها به طور غیر مستقیم برخورد داشته اید. این مدل زمانی اتفاق میافتد که عملکردی به خاطر ورودی اشتباه انجام شود.وقتی این حالت اتفاق میافتد همراه با اخطار برنامه کاملا متوقف می شود. کد زیر نحوه عملکرد و خروجی یک Exception را هنگام تقسیم عددی بر صفر نشان می دهد.

num1 = 7
num2 = 0
print(num1/num2)

خروجی:

>>>
ZeroDivisionError: division by zero
>>>

استثنا و یا exception ها در موارد متعددی اتفاق میافتند. چند مورد از متداول ترین آنها شمامل موارد زیر است: ImportError:زمانی که درج ماژول به اشتباه صورت گیرد IndexError: زمانی که لیستی با یک عدد نشانگر خارج از اعضا نشان داده شود NameError: زمان استفاده از یک متغیر نا معلوم SyntaxError: هنگام اشتباه در کد نویسی TypeError: صدا زدن یک مقدار با نوع اشتباه در یک تابع ValueError: صدا زدن یک مقدار درون تابع با نوع درست اما مقدار اشتباه برای رسیدگی به استثنا ها، و هنگام فراخوانی یک exception، می توانید از دستور try/ exception استفاده کنید. بلوک try حاوی کدیست که ممکن است exception را برانگیزد. اگر این exception اتفاق افتد، کد در بلوک 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
>>>

نکته:در کد بالا پیغام خطا نوع exception را مشخص می کند. Exception Handling یک کد حاوی try می تواند چندین حالت متفاوتی داشته باشد، به جز بلوک هایی که بتواند exception های مختلف را مدیریت کند exception چندگانه همچنین می تواند در یک تک جز به بلوک با استفاده از پرانتز قرار داده شود.

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 handeling بسیار کارآمد است به خصوص زمانی که ورودی از جانب کاربر اشتباه باشد.