در مبحث try-except ما سه بلوک کد داریم که عبارتند از : try, except, finally
در زیر کار این سه بلوک را برای شما بیان کرده ایم.
- بلوک try به شما امکان می دهد که یک بلوک کد را برای وجود خطا آزمایش کنید.
- بلوک except به شما اجازه رسیدگی یا handle کردن خطای ایجاد شده را می دهد تا رفتار مناسب را با آن مشخص نماید.
- بلوک finally به شما اجازه می دهد بدون در نظر گرفتن نتیجه try-except بلوک کد مورد نظر داخل آن اجرا شود.
رسیدگی به استثنا یا مدیریت خطا در پایتون
هنگامی که خطایی رخ می دهد که در اصطلاح به آن استثنا می گوییم، پایتون متوقف می شود و خطایی نشان داده می شود.
این استثناعات را می توانیم با دستور try انجام دهیم.
مثال: در این مثال بلوک try یک استثنا ایجاد می کند زیرا متغیر x تعریف نشده است.
try:
print(x)
except:
print("An exception occurred")
از آن جا که بلوک try خطا ایجاد می کند، بلوک except اجرا می شود.
در صورتی که بلوک try وجود نداشته باشد، برنامه خراب می شود و خطایی رخ می دهد.
مثال: این عبارت باعث ایجاد خطا می شود زیرا متغیر x تعریف نشده است.
print(x)
استثناهای بیشتر
شما می توانید هر تعداد بلوک استثنا که می خواهید را تعریف کنید، به عنوان مثال اگر می خواهید بلوک خاصی از کد را برای نوع خاصی از خطا اجرا کنید می توانید این کار را انجام دهید.
مثال: در این مثال دو except ایجاد شده است که یکی برای خطای تعریف نشدن مقدار x است و دیگری برای خطاهای موارد دیگر استفاده می شود که در این جا بلوک کد except با نام NameError اجرا می شود چون x تعریف نشده است.
try:
print(x)
except NameError:
print("Variable x is not defined")
except:
print("Something else went wrong")
بلوک else
می توانید از کلمه کلیدی else برای تعریف بلوکی از کد که در صورت عدم وجود خطا اجرا می شود استفاده کنید.
مثال: در این مثال بلوک try هیچ خطایی ایجاد نمی کند، پس بلوک except اجرا نمی شود و بلوک else اجرا می شود.
try:
print("Hello")
except:
print("Something went wrong")
else:
print("Nothing went wrong")
بلوک finally
بلوک finally، در صورتی که تعریف شده باشد، بدون در نظر گرفتن این که بلوک try خطایی ایجاد کند یا نکند کدهای داخل بلوک خود را اجرا می کند.
مثال: در این مثال به دلیل اینکه بلوک finally تعریف شده است بدون در نظر گرفتن اینکه آیا بلوک try خطایی ایجاد می کند یا نه کد خود را اجرا می کند.
try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")
بلوک finally همچنین می تواند برای بستن اشیاء پایتون و پاکسازی منابع هم کاربردی و مفید باشد.
مثال: در این مثال با استفاده از بلوک finally فایلی را که قابلیت نوشتن ندارد را باز می کند و در آن می نویسد.
try:
f = open("demofile.txt")
f.write("Lorum Ipsum")
except:
print("Something went wrong when writing to the file")
finally:
f.close()
در این جا برنامه می تواند بدون باز گذاشتن شی پرونده ادامه پیدا کند.
کلمه کلیدی raise در خطاها
شما به عنوان یک توسعه دهنده پایتون، در صورت بروز شرایطی می توانید یک استثنا را حذف کنید.
برای throw و یا raise کردن یک استثنا می توانید از کلمه کلیدی raise استفاده کنید.
مثال: در این مثال اگر x کمتر از 0 باشد برنامه را متوقف می کند و خطایی را ایجاد می کند.
x = -1
if x < 0:
raise Exception("Sorry, no numbers below zero")
کلمه کلیدی raise برای افزایش یک استثنا استفاده می شود.
می توانید نوع خطایی را که ایجاد می شود و متنی که قرار است به کاربر نشان داده شود را مشخص کنید.
مثال: در این مثال اگر مقدار x یک عدد صحیح نباشد TypeError را یک واحد افزایش می دهد.
x = "hello"
if not type(x) is int:
raise TypeError("Only integers are allowed")