دوره‌ها / آموزش پایتون (Python) / مدیریت خطا (Python Try...Except)

مدیریت خطا (Python Try...Except)

15 دقیقه Article

مدیریت هوشمند خطاها: کدی که نمی‌شکند (Try...Except) 🛡️⚠️

خطاها در برنامه‌نویسی اجتناب‌ناپذیرند. یا اینترنت قطع می‌شود، یا فایل وجود ندارد، یا کاربر به جای عدد، متن وارد می‌کند. یک برنامه‌نویس خوب کسی نیست که خطا ندارد، بلکه کسی است که خطاها را پیش‌بینی و مدیریت می‌کند.

۱. انواع خطا در پایتون

  • SyntaxError: اشتباه نویسی در کد (برنامه اصلاً اجرا نمی‌شود).
  • Runtime Errors (Exceptions): خطا در زمان اجرا (مثلاً تقسیم بر صفر).

۲. ساختار چهارگانه Try

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

توضیح بخش‌ها:

  • else: زمانی اجرا می‌شود که هیچ خطایی در بخش try رخ ندهد.
  • finally: مخصوص عملیات "پاکسازی" (Cleanup) است؛ مثل بستن فایلی که باز شده یا قطع اتصال به پایگاه داده.

۳. ایجاد خطا با Raise

گاهی بر اساس منطق تجاری برنامه، شما نیاز دارید عمداً خطا ایجاد کنید:

if x < 0:
  raise Exception("Sorry, no numbers below zero")
مدیریت خطای خاص: همیشه سعی کنید نوع خطا را بنویسید (مثل except ValueError) به جای اینکه فقط بنویسید except. این کار باعث می‌شود خطاهای پیش‌بینی نشده (مثل خطای حافظه) نادیده گرفته نشوند.
اشکال‌زدایی (Debugging): با استفاده از بلوک جفت except Exception as e می‌توانید متن دقیق خطایی که پایتون صادر کرده را چاپ کنید تا بفهمید مشکل دقیقاً کجاست.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

جلوگیری از خطای تعریف نشدن Easy
سوال تمرین

یک بلوک try...except بنویسید که سعی کند متغیر z را چاپ کند. چون z تعریف نشده، در بخش except عبارت 'Error' را چاپ کنید.

پاسخ تمرین
PYTHON
try:
  print(z)
except:
  print('Error')
جلوگیری از خطای تقسیم بر صفر Medium
سوال تمرین

یک بلوک try...except بنویسید که سعی کند عدد 10 را بر 0 تقسیم کند و چون این کار خطا دارد (ZeroDivisionError)، در بخش except عبارت 'Cant divide by zero' را چاپ کند.

پاسخ تمرین
PYTHON
try:
  x = 10 / 0
except:
  print('Cant divide by zero')

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.