فصل ۱۲: مدیریت خطا و استثناها (Exception Handling)

سرفصلهای فصل ۱۲ :
- خطا (Error) چیست؟
- انواع خطاها در پایتون
- استفاده از try-except
- استفاده از else و finally
- تعریف استثنای اختصاصی (Custom Exception)
- نکات حرفهای و مثالهای کاربردی
- تمرین و پروژه کوچک
۱۲.۱ معرفی خطا (Error) و استثنا (Exception)
در برنامهنویسی، خطا (Error) و استثنا (Exception) اتفاقهایی هستند که اگر مدیریت نشوند، باعث توقف ناگهانی برنامه میشوند.
مثال ساده:
print(5 / 0)
خروجی:
ZeroDivisionError: division by zero
این خطا مانع ادامه اجرای برنامه میشود.
۱۲.۲ انواع خطاها
- SyntaxError: اشتباه تایپی/دستور زبانی
if True
print("Hello") # SyntaxError به خاطر نبود : در شرط
- NameError: استفاده از متغیری که تعریف نشده
print(x) # NameError: name 'x' is not defined
- TypeError: نوع داده اشتباه
print("5" + 6) # TypeError چون نمیتوان رشته و عدد را جمع کرد
- ZeroDivisionError: تقسیم بر صفر
print(10/0)
- ValueError: مقدار نامعتبر
int("hello") # نمیشود کلمه را به عدد تبدیل کرد
۱۲.۳ مدیریت خطا با try-except
try:
n = int(input("یک عدد وارد کن: "))
print(10 / n)
except ZeroDivisionError:
print("نمیتوان بر صفر تقسیم کرد!")
except ValueError:
print("فقط عدد صحیح وارد کن!")
توضیح:
- فقط کد داخل try اجرا میشود.
- اگر خطایی رخ دهد، اجرای except مرتبط شروع میشود.
۱۲.۴ استفاده از else و finally
- else: اگر خطا نباشد اجرا میشود.
- finally: همیشه اجرا میشود (حتی اگر خطا باشد یا نه).
try:
file = open("data.txt", "r")
except FileNotFoundError:
print("فایل پیدا نشد.")
else:
print("فایل با موفقیت باز شد.")
file.close()
finally:
print("به پایان رسید.")
۱۲.۵ تعریف خطای شخصیسازی شده (Custom Exception)
گاهی لازم است خودمان استثنای خاص تعریف کنیم:
class MyError(Exception):
pass
try:
raise MyError("یه خطای سفارشی!")
except MyError as e:
print("خطا:", e)
۱۲.۶ نکات حرفهای
- همیشه سعی کن فقط خطای مشخص را مدیریت کنی نه همهی خطاها (generic except اشتباه است).
- پیام کاربرپسند و قابل فهم بنویس.
نمونه بد:
try:
# کد
except:
print("یه خطا رخ داد!") # نمیفهمی مشکل چی بوده
۱۲.۷ تمرین کوچک
یک برنامه بنویس که از کاربر دو عدد بگیرد، تقسیم کند و با مدیریت خطا پیغام مناسب بدهد.