Python Try Except

مدیریت استثناها

زمانی که خطایی رخ می‌دهد، که ما در اینجا آن را استثنا (exception) می‌نامیم، پایتون متوقف شده و یک پیغام خطا را نمایش می‌دهد.

چنین استثناهایی را می‌توان توسط دستور try مدیریت کرد. این دستور از ۴ بخش تشکیل شده است:

  • بلوک try: به شما این امکان را می‌دهد که یک بلوک کد رابرای خطاهای احتمالی تست کنید.
  • بلوک except: به شما این امکان را می‌دهد که خطای احتمالی را مدیریت کنید.
  • بلوک else: به شما این امکان را می‌دهد که در صورت عدم وجود خطا کد را اجرا نمائید.
  • بلوک finally: به شما این امکان را می‌دهد که صرفنظر از نتیجه بلوک try-except کد را اجرا کنید.

در مثال زیر چون x تعریف نشده، در بلوک try با خطا مواجه خواهیم شد.


#The try block will generate an error, because x is not defined:

try:
print(x)
except:
print("An exception occurred")

خروجی:

از آنجا که بلوک try یک خطا را ایجاد کرده است، بلوک except اجرا می‌شود.

بدون بلوک try برنامه با شکست مواجه شده و پیغام خطا را نمایش می‌دهد.


#This will raise an exception, because x is not defined:

print(x)

خروجی:

مدیریت چندین خطا

می‌توانید هر تعداد بلوک except به دلخواه خود بنویسید. مثلاً شاید بخواهید که برای یک خطای خاص یک بلوک کد خاص را اجرا کنید.

در کد زیر در صورت وجود خطای NameError یک پیغام خاص و در صورت وجود خطای دیگر یک پیغام متفاوت نشان داده خواهد شد.


#The try block will generate a NameError, because x is not defined:

try:
print(x)
except NameError:
print("Variable x is not defined")
except:
print("Something else went wrong")

خروجی:

else

در صورتی که خطایی وجود نداشته باشد، می‌توانید از بلوک else جهت اجرای یک بلوک کد استفاده کنید.


#The try block does not raise any errors, so the else block is executed:

try:
print("Hello")
except:
print("Something went wrong")
else:
print("Nothing went wrong")

خروجی:

finally

در صورتی که بلوک finally تعریف شود، صرفنظر از اینکه در بلوک try با خطا مواجه شویم یا خیر، این بلوک کد اجرا می‌شود.


#The finally block gets executed no matter if the try block raises any errors or not:

try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")

خروجی:

استفاده از این بلوک برای بستن اشیاء و پاکسازی منابع می‌تواند مفید باشد.


#The try block will raise an error when trying to write to a read-only file:

try:
f = open("demofile.txt")
try:
f.write("Lorum Ipsum")
except:
print("Something went wrong when writing to the file")
finally:
f.close()
except:
print("Something went wrong when opening the file")

خروجی:

ایجاد استثنا

به عنوان یک برنامه‌نویس پایتون ممکن است که تحت شرایطی که پیش‌بینی کرده‌اید بخواهید یک خطا را ایجاد کنید. برای انجام چنین کاری از دستور raise استفاده می‌کنیم.


x = -1

if x < 0:
raise Exception("Sorry, no numbers below zero")

خروجی:

می‌توان نوع خطا و پیغامی را که به کاربر نمایش داده می‌شود، توسط این دستور تعیین کرد.


x = "hello"

if not type(x) is int:
raise TypeError("Only integers are allowed")

خروجی: