مدیریت خطاها در پایتون چیست؟
هنگام اجرای یک برنامه پایتون ممکن است با خطاهای مختلفی مواجه شویم. بعضی از خطاها باعث توقف اجرای برنامه میشوند. با استفاده از 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 میتوانیم برنامههایی بنویسیم که در برابر
خطاهای مختلف رفتار مناسبی داشته باشند.