مدیریت خطاها در پایتون چیست؟

هنگام اجرای یک برنامه پایتون ممکن است با خطاهای مختلفی مواجه شویم. بعضی از خطاها باعث توقف اجرای برنامه می‌شوند. با استفاده از Exception Handling می‌توانیم بسیاری از این خطاها را مدیریت کنیم و رفتار مناسبی برای برنامه تعریف کنیم.

خطا و Exception چیست؟

اگر پایتون هنگام اجرای برنامه با مشکلی مواجه شود، ممکن است یک Exception ایجاد کند.

برای مثال، تقسیم یک عدد بر صفر مجاز نیست:

number = 10

result = number / 0

print(result)

اجرای این برنامه با خطای ZeroDivisionError مواجه می‌شود.

ساختار try و except

برای مدیریت خطاها معمولاً از try و except استفاده می‌کنیم.

try:
    number = 10 / 0
except:
    print("خطایی رخ داد")

کدی که احتمال دارد خطا ایجاد کند داخل بخش try قرار می‌گیرد. اگر خطایی رخ دهد، بخش except اجرا می‌شود.

مدیریت یک خطای مشخص

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

try:
    number = 10 / 0
except ZeroDivisionError:
    print("تقسیم بر صفر امکان‌پذیر نیست")

خطای ValueError

زمانی که مقدار ورودی از نوع مورد انتظار نباشد، ممکن است خطای ValueError ایجاد شود.

try:
    age = int(input("سن خود را وارد کنید: "))
    print(age)
except ValueError:
    print("لطفاً یک عدد وارد کنید")

اگر کاربر مثلاً به جای عدد عبارت hello وارد کند، برنامه به جای متوقف شدن، پیام مناسب نمایش می‌دهد.

خطای TypeError

زمانی که عملیاتی روی نوع داده نامناسب انجام شود، ممکن است TypeError ایجاد شود.

try:
    result = "10" + 5
except TypeError:
    print("نوع داده‌ها با یکدیگر سازگار نیستند")

خطای ZeroDivisionError

try:
    result = 20 / 0
except ZeroDivisionError:
    print("نمی‌توان عددی را بر صفر تقسیم کرد")

چند except

یک بخش try می‌تواند چند نوع خطا را مدیریت کند.

try:
    number = int(input("یک عدد وارد کنید: "))
    result = 100 / number
    print(result)

except ValueError:
    print("لطفاً عدد وارد کنید")

except ZeroDivisionError:
    print("عدد صفر وارد نکنید")

استفاده از else

بخش else زمانی اجرا می‌شود که کد داخل try بدون خطا اجرا شده باشد.

try:
    number = int(input("یک عدد وارد کنید: "))

except ValueError:
    print("ورودی نامعتبر است")

else:
    print("عدد وارد شده:", number)

استفاده از finally

بخش finally تقریباً در هر شرایطی اجرا می‌شود؛ چه خطایی رخ داده باشد و چه خطایی رخ نداده باشد.

try:
    number = int(input("یک عدد وارد کنید: "))

except ValueError:
    print("ورودی نامعتبر است")

finally:
    print("اجرای برنامه به پایان رسید")

ساختار کامل try، except، else و finally

try:
    number = int(input("یک عدد وارد کنید: "))

except ValueError:
    print("لطفاً عدد صحیح وارد کنید")

else:
    print("عدد شما:", number)

finally:
    print("این بخش همیشه اجرا می‌شود")

گرفتن پیام خطا

می‌توانیم خود Exception را داخل یک متغیر دریافت کنیم و پیام خطا را نمایش دهیم.

try:
    number = 10 / 0

except ZeroDivisionError as error:
    print("خطا:", error)

استفاده از as error باعث می‌شود اطلاعات Exception داخل متغیر error قرار بگیرد.

خطای FileNotFoundError

هنگام کار با فایل‌ها ممکن است فایلی که درخواست کرده‌ایم وجود نداشته باشد.

try:
    file = open("data.txt", "r")

except FileNotFoundError:
    print("فایل موردنظر پیدا نشد")

استفاده از raise

با دستور raise می‌توانیم خودمان یک Exception ایجاد کنیم.

age = -5

if age < 0:
    raise ValueError("سن نمی‌تواند منفی باشد")

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

یک مثال کاربردی

فرض کنید می‌خواهیم برنامه‌ای بنویسیم که دو عدد را از کاربر دریافت کرده و آن‌ها را تقسیم کند:

try:
    number1 = float(input("عدد اول: "))
    number2 = float(input("عدد دوم: "))

    result = number1 / number2

except ValueError:
    print("لطفاً عدد معتبر وارد کنید")

except ZeroDivisionError:
    print("عدد دوم نمی‌تواند صفر باشد")

else:
    print("نتیجه:", result)

این روش باعث می‌شود برنامه در برابر دو خطای رایج رفتار مناسبی داشته باشد.

چرا مدیریت خطا مهم است؟

خطاهای رایج در پایتون

خطا توضیح
ValueError مقدار نامعتبر برای یک عملیات
TypeError استفاده نامناسب از نوع داده
ZeroDivisionError تقسیم بر صفر
FileNotFoundError پیدا نشدن فایل
NameError استفاده از نامی که تعریف نشده است
IndexError دسترسی به اندیس خارج از محدوده
KeyError دسترسی به کلید ناموجود در Dictionary

خلاصه ساختار Exception Handling

بخش کاربرد
try کدی که احتمال خطا دارد
except مدیریت خطا
else اجرا در صورت نبود خطا
finally بخشی که در پایان اجرا می‌شود
raise ایجاد یک Exception به صورت دستی

سؤالات متداول

Exception در پایتون چیست؟

Exception خطایی است که هنگام اجرای برنامه رخ می‌دهد و می‌توان با استفاده از ساختارهایی مانند try و except آن را مدیریت کرد.

تفاوت try و except چیست؟

کدی که احتمال ایجاد خطا دارد داخل try قرار می‌گیرد و در صورت رخ دادن خطا، بخش except اجرا می‌شود.

else در Exception Handling چه کاربردی دارد؟

بخش else زمانی اجرا می‌شود که کد داخل try بدون خطا اجرا شده باشد.

finally چه زمانی اجرا می‌شود؟

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

دستور raise چه کاری انجام می‌دهد؟

با raise می‌توانیم یک Exception را به صورت دستی ایجاد کنیم.

جمع‌بندی

مدیریت خطا یکی از بخش‌های مهم برنامه‌نویسی با پایتون است. با یادگیری try، except، else، finally و raise می‌توانیم برنامه‌هایی بنویسیم که در برابر خطاهای مختلف رفتار مناسبی داشته باشند.

← درس قبلی: ماژول‌ها و import بازگشت به آموزش پایتون درس بعدی: کار با فایل‌ها در پایتون →