نجات از خطاها
### داستان بیست و یکم: نجات از خطاها
آراد پس از اضافه کردن ویژگیها و رفتارهای مختلف به قهرمانهایش، یک روز با مشکلی مواجه شد. او هنگام اجرای برنامه با خطاهایی روبهرو شد که مانع اجرای درست برنامه میشدند. آراد که گیج شده بود، به سینا پیام داد و گفت: «سینا، برنامهام خطا میده و نمیدونم چطور باید از این خطاها خلاص بشم. چیکار کنم؟»
سینا با آرامش گفت: «آراد، همه برنامهنویسها با خطاها مواجه میشن و این کاملاً طبیعیه. راهی وجود داره به نام “مدیریت استثناها” که با کمک `try` و `except` بهت اجازه میده خطاها رو شناسایی کنی و به جای اینکه برنامه متوقف بشه، بهش بگی که در صورت وقوع خطا، چطور رفتار کنه.»
#### آشنایی با `try` و `except`
سینا برای آراد توضیح داد که چطور از `try` و `except` استفاده کند تا برنامه در صورت وقوع خطا، به جای توقف، پیام مناسبی نمایش دهد. او مثالی ساده برای تقسیم دو عدد نوشت تا آراد مفهوم مدیریت استثناها را بهتر درک کند.
“`python
try:
عدد۱ = int(input(“عدد اول را وارد کنید: “))
عدد۲ = int(input(“عدد دوم را وارد کنید: “))
نتیجه = عدد۱ / عدد۲
print(“نتیجه تقسیم:”, نتیجه)
except ZeroDivisionError:
print(“خطا: نمیتوان یک عدد را بر صفر تقسیم کرد.”)
except ValueError:
print(“خطا: لطفاً فقط اعداد صحیح وارد کنید.”)
“`
سینا توضیح داد که `try` تلاش میکند تا کد داخل آن را اجرا کند. اگر خطایی رخ دهد، به بخش `except` مربوط به آن خطا میرود و پیام خطای مناسب را نمایش میدهد. به این ترتیب، برنامه بدون متوقف شدن ادامه پیدا میکند.
#### اجرای کد و مواجهه با خطاها
آراد کد را اجرا کرد و به جای وارد کردن یک عدد، یک رشته وارد کرد. برنامه به جای اینکه متوقف شود، پیام خطای زیر را نمایش داد:
“`
خطا: لطفاً فقط اعداد صحیح وارد کنید.
“`
سپس آراد تلاش کرد که عدد دوم را صفر وارد کند و برنامه پیام زیر را نمایش داد:
“`
خطا: نمیتوان یک عدد را بر صفر تقسیم کرد.
“`
آراد با تعجب گفت: «خیلی جالبه! با استفاده از `try` و `except` برنامه من به جای متوقف شدن، خطا رو مدیریت میکنه!»
#### استفاده از چندین `except`
سینا به آراد گفت که میتواند چندین `except` برای مدیریت انواع مختلف خطاها استفاده کند. او مثال دیگری با دیکشنری نوشت:
“`python
قهرمانها = {“رستم”: ۱۰۰, “سهراب”: ۸۰}
try:
نام_قهرمان = input(“نام قهرمان را وارد کنید: “)
سلامتی = قهرمانها[نام_قهرمان]
print(f”سلامتی قهرمان {نام_قهرمان}: {سلامتی}”)
except KeyError:
print(“خطا: قهرمان مورد نظر یافت نشد.”)
“`
در اینجا، اگر آراد نام قهرمانی را وارد کند که در دیکشنری وجود ندارد، برنامه پیام خطای مناسبی نمایش میدهد و متوقف نمیشود.
#### استفاده از `else` و `finally`
سینا توضیح داد که میتوان از `else` برای اجرای کدی که در صورت عدم وقوع خطا باید اجرا شود و از `finally` برای اجرای کدی که در هر صورت باید انجام شود، استفاده کرد.
او مثالی به آراد نشان داد:
“`python
try:
عدد۱ = int(input(“عدد اول را وارد کنید: “))
عدد۲ = int(input(“عدد دوم را وارد کنید: “))
نتیجه = عدد۱ / عدد۲
except ZeroDivisionError:
print(“خطا: نمیتوان یک عدد را بر صفر تقسیم کرد.”)
except ValueError:
print(“خطا: لطفاً فقط اعداد صحیح وارد کنید.”)
else:
print(“نتیجه تقسیم:”, نتیجه)
finally:
print(“برنامه به پایان رسید.”)
“`
در اینجا، اگر هیچ خطایی رخ ندهد، بخش `else` اجرا میشود و نتیجه نمایش داده میشود. همچنین، بخش `finally` همیشه اجرا میشود و پیام «برنامه به پایان رسید» را نمایش میدهد، چه خطایی رخ دهد و چه رخ ندهد.
#### نتیجهگیری
آراد گفت: «حالا فهمیدم که چطور میتونم خطاها رو مدیریت کنم و به جای متوقف شدن برنامه، به کاربر پیام مناسبی نمایش بدم. این خیلی کاربردیه!»
سینا لبخند زد و گفت: «آفرین، آراد! با مدیریت استثناها، میتونی برنامههایی حرفهایتر بسازی و تجربه کاربری بهتری ارائه بدی. حالا با استفاده از `try`, `except`, `else` و `finally` میتونی از خطاها نجات پیدا کنی و برنامهات رو بدون نگرانی از متوقف شدن، اجرا کنی.»
آراد با خوشحالی گفت: «ممنون سینا! حالا میدونم چطور با خطاهای برنامهنویسی مقابله کنم و به بهترین شکل به کاربر پیام بدم.»