آموزش پایتون - بلوک Try-Except

بلوک Try-Except در پایتون

در پایتون، بلوک try-except برای مدیریت روان استثناها و خطاها به کار می‌رود تا اطمینان حاصل شود که برنامه شما حتی در صورت بروز مشکل نیز به اجرا ادامه می‌دهد. این آموزش مفاهیم پایه استفاده از بلوک try-except، ساختار متنی (Syntax) آن و بهترین روش‌های به کارگیری آن را پوشش می‌دهد.

مدیریت استثناها به شما این امکان را می‌دهد که با دریافت استثناها و انجام اقدامات مناسب، خطاهای موجود در کد خود را مدیریت کنید؛ به جای اینکه اجازه دهید برنامه متوقف و کرش کند. استثنا خطایی است که در طول اجرای برنامه رخ می‌دهد و مدیریت این استثناها تضمین می‌کند که برنامه شما می‌تواند به موقعیت‌های غیرمنتظره پاسخ دهد.

بلوک try-except در پایتون برای گرفتن و مدیریت استثناها استفاده می‌شود. کدی که ممکن است باعث بروز استثنا شود داخل بلوک try قرار می‌گیرد و کدی که برای مدیریت استثنا نوشته شده داخل بلوک except قرار می‌گیرد.

ساختار (Syntax)

ساختار پایه بلوک try-except در پایتون به صورت زیر است −

try:
   # Code that might cause an exception
   risky_code()
except SomeException as e:
   # Code that runs if an exception occurs
   handle_exception(e)

مثال

در این مثال، اگر یک مقدار غیرعددی وارد کنید، یک ValueError رخ خواهد داد. اگر عدد صفر را وارد کنید، یک ZeroDivisionError رخ خواهد داد. بلوک‌های except این استثناها را دریافت کرده و پیام‌های خطای مناسب را چاپ می‌کنند −

try:
   number = int(input("Enter a number: "))
   result = 10 / number
   print(f"Result: {result}")
except ZeroDivisionError as e:
   print("Error: Cannot divide by zero.")
except ValueError as e:
   print("Error: Invalid input. Please enter a valid number.")

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

در پایتون، شما می‌توانید انواع مختلفی از استثناها را با استفاده از چند بلوک except در یک دستور try-except واحد مدیریت کنید. این کار به کد شما اجازه می‌دهد تا به انواع مختلف خطاهایی که ممکن است در طول اجرا رخ دهند، واکنش‌های متفاوتی نشان دهد.

ساختار (Syntax)

ساختار پایه برای مدیریت استثناهای متعدد در پایتون به صورت زیر است −

try:
   # Code that might raise exceptions
   risky_code()
except FirstExceptionType:
   # Handle the first type of exception
   handle_first_exception()
except SecondExceptionType:
   # Handle the second type of exception
   handle_second_exception()
# Add more except blocks as needed for other exception types

مثال

در مثال زیر −

  • اگر عدد صفر را به عنوان مقسوم‌علیه وارد کنید، یک "ZeroDivisionError" رخ می‌دهد و بلوک مربوط به except ZeroDivisionError با چاپ یک پیام خطا آن را مدیریت می‌کند.
  • اگر برای مقسوم یا مقسوم‌علیه یک ورودی غیرعددی وارد کنید، یک "ValueError" رخ می‌دهد و بلوک except ValueError با چاپ یک پیام خطای متفاوت آن را مدیریت می‌کند.
try:
   dividend = int(input("Enter the dividend: "))
   divisor = int(input("Enter the divisor: "))
   result = dividend / divisor
   print(f"Result of division: {result}")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")

استفاده از عبارت Else همراه با بلوک Try-Except

در پایتون، عبارت else می‌تواند همراه با بلوک try-except استفاده شود تا کدی را مشخص کند که تنها در صورت عدم وقوع هیچ استثنایی در بلوک try باید اجرا شود. این قابلیت راهی را فراهم می‌کند تا بین کد اصلی که ممکن است استثنا ایجاد کند و کد اضافی که فقط باید در شرایط عادی اجرا شود، تفکیک قائل شوید.

ساختار (Syntax)

ساختار پایه عبارت else در پایتون به صورت زیر است −

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()

مثال

در مثال زیر −

  • اگر یک ورودی غیر صحیح (غیر عدد صحیح) وارد کنید، یک ValueError رخ می‌دهد و بلوک مربوط به except ValueError آن را مدیریت می‌کند.
  • اگر عدد صفر را به عنوان مخرج وارد کنید، یک ZeroDivisionError رخ می‌دهد و بلوک مربوط به except ZeroDivisionError آن را مدیریت می‌کند.
  • اگر تقسیم با موفقیت انجام شود (یعنی هیچ استثنایی رخ ندهد)، بلوک else اجرا شده و نتیجه تقسیم را چاپ می‌کند.
try:
   numerator = int(input("Enter the numerator: "))
   denominator = int(input("Enter the denominator: "))
   result = numerator / denominator
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
else:
   print(f"Result of division: {result}")

عبارت Finally

عبارت finally مکانیزمی را فراهم می‌کند تا تضمین شود کدی مشخص صرف‌نظر از اینکه استثنایی رخ داده باشد یا خیر، حتماً اجرا می‌شود. این ویژگی برای انجام عملیات پاک‌سازی مانند بستن فایل‌ها یا اتصالات شبکه، آزادسازی قفل‌ها یا آزاد کردن منابع بسیار مفید است.

ساختار (Syntax)

ساختار پایه عبارت finally در پایتون به صورت زیر است −

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()
finally:
   # Code that always runs, regardless of exceptions
   cleanup_code()

مثال

در این مثال −

  • اگر فایل "example.txt" وجود داشته باشد، محتوای آن خوانده و چاپ می‌شود و بلوک else عملیات موفقیت‌آمیز را تأیید می‌کند.
  • اگر فایل پیدا نشود (FileNotFoundError)، یک پیام خطای مناسب در بلوک except چاپ می‌شود.
  • بلوک finally تضمین می‌کند که فایل بسته‌می‌شود (file.close())؛ صرف‌نظر از اینکه عملیات فایل با موفقیت انجام شود یا استثنایی رخ دهد.
try:
   file = open("example.txt", "r")
   content = file.read()
   print(content)
except FileNotFoundError:
   print("Error: The file was not found.")
else:
   print("File read operation successful.")
finally:
   if 'file' in locals():
      file.close()
   print("File operation is complete.")

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.