دستور try … except برای مدیریت خطا در پایتون (python) بکار میره! که ما در این مطلب به طور کامل با مثالهای متعدد بررسیش میکنیم!
در این مثال به طور کلی سعی میکنیم مفهوم دستور try … except دستمون بیاد! تا در مثال های بعدی بتونیم مانور بیشتری بدیم!
خب قطعه کد زیر رو درنظر بگیرید!
print(14/0)
قبول دارید اگر این خط کد رو اجرا کنیم، قطعاً بهمووون خطا میده؟! [باید بگید بله قبول داریم! چون مگه میشه یک عدد رو بر صفر تقسیم کرد؟! نمیشه دیگه! چون این کار از لحاظ ریاضی غلطه!]
پس نتیجه اجرای خط بالا، خطایی به شرح زیر است!
Traceback (most recent call last): File "D:/Codes/Koolac/Code36.py", line 1, in print(5/0) ZeroDivisionError: division by zero
اسم خطا رو هم اگر در خطای بالا نگاه کنید میبینید که نوشته! (نوشته: ZeroDivisionError یعنی خطای تقسیم بر صفر!)
چرا با اسم این خطا کار داریم رو جلوتر میبینید! فقط اسمش رو الان حفظ کنید تا آخر مطلب!
خب حالا ما میخوایم اگر همچین خطایی پیش اومد، بگه: “شما نمیتونید یک عدد رو به صفر تقسیم کنید”!
برای اینکار باید قطعه کد زیر رو در نظر بگیرید، تا در ادامه توضیحش بدم!
try: print(14 / 0) except: print("You cannot divide a number by 0!")
خب! به زبان خودمووونی این خط کد اینجوری تعبیر میشه!:
بیا زووور بزن که print کنی 14/0 رو!
اگر نشد، بیا print کن که : “You cannot divide a number by 0!”
که معنی اون جمله انگلیسی هم که نوشتیم میشه!: «شما نمیتوانید یک عدد رو به صفر تقسیم کنید!»
try یعنی زووور زدن! امتحان کردن! و except هم یعنی «مگر، بجز» که ما به صورت «اگر نشد» در خط بالا گفتیم!
خب این از بیان غیر رسمی دستور try … except ! حالا بریم به زبان رسمی هم همینها رو بگیم!
در بخش try میایم، کدی که قرار است به صورت عادی اجرا شود را وارد میکنیم!
در بخش except میایم کدهایی که در صورت بروز خطا باید اجرا شود رو وارد میکنیم!
این هم از زبان رسمی دستور try … except !
قبل از شروع رسمی مثال 2، بیاید کد زیر رو در پایتون (python) بزنیم، ببنیم چی میگه!
a = TRUE print(14 / 0)
پایتون بعد از اجرای این کد شاکی میشه! و خطا میده که!:
Traceback (most recent call last): File "D:/Codes/Koolac/Code36.py", line 8, in a=TRUE NameError: name 'TRUE' is not defined
خب یه یادآوری بکنم به در زبان برنامه نویسی پایتون، باید بنویسیم True و نه TRUE ! (بر خلاف زبان برنامه نویسی R !) که اگر نمیدونید اصلاً این متغیر True چیست، باید به آموزش انواع متغیرها در پایتون مراجعه کنید! [پس دلیل این شاکی شدن python این بود!]
راستی به اسم خطا که در اون آخر نوشته، توجه کنید! که نوشته NameError! چرا هِی با اسم این خطاها کار داریم رو جلوتر میبینید!
پس با این وجود الان دو تا خطا داریم! یکی اینکه اسم True رو به صورت اشتباه نوشتیم! دوم اینکه نباید عددی رو به صفر تقسیم کنیم!
شاید بگید خب بیایم از دستور try… except استفاده کنیم! به صورت زیر!
try: a=TRUE print(14 / 0) except: print("You cannot divide a number by 0!")
اما قبول دارید چیزی که نوشتیم، خیلی درست نیست؟! چون توی بخش except، باید در اصل بگیم، اگر خطا مربوط به تقسیم بر صفر بود، خطا بده که «عدد رو نمیشه بر صفر تقسیم کرد!» اما اگر خطا بخاطر اسمِ اشتباه بود، بگه: آقای محترم! توی پایتون چیزی به اسم TRUE تعریف نشده!
یعنی باید در اصل کدی بنویسیم، که میزانی از فهم و شعور رو داشته باشه که بسته به نوع خطا، واکنشهای متفاوتی از خودش نشون بده! نه اینکه واسه همه انواع خطا یه چیز بگه!!!
پس میایم مثلاً همین رو به صورت زیر مینویسیم!
try: a=TRUE print(14 / 0) except NameError: print("TRUE in not defined in Python!") except ZeroDivisionError: print("You cannot divide a number by 0!")
حالا کدمون با شعورتر شده! و بسته به نوع خطا، واکنش متفاوت نشون میده! قطعه که بالا به زبون خودمووونی میشه!:
زور بزن که متغیری به اسم a تعریف کنی با مقدار TRUE! و همچنین print کنی 14/0 رو!
اگر نشد و دلیل این نشدن، خطای نوع NameError بود! print کن که «TRUE is not defined in Python!»
اگر نشد و دلیل این نشدن، خطای ZeroDivisionError بود! print کن که «You cannot divide a number by 0!»
راستی اون جمله TRUE is not defined in Python هم یعنی TRUE توی پایتون تعریف نشده! این متن رو من دوست داشتم بگم! ولی اجباری نیست اینو پرینت کنید! دوست داشتید میتونید هر چیزی رو print کنید! (حتی میتونید به کاربر تیکه بندازید! اسم خودتون رو چاپ کنید یا هر چیز دیگه! خلاصه اون متن کاملاً دست شماست!)
شاید بپرسید اون خطای NameError و ZeroDivisionError رو اسمهاشون رو از کجا فهمدیم؟! جواب اینه که: «اگر برگردید مطلب رو از اول بخونید، میبینید دوجا با این دو اسم روبرو شدیم! که هر دوجا هم تاکید کردم، این اسم ها رو یادتون باشه، بعداً کارشون دارید! اون بعداً دقیقاً همینجا بود!»
تعداد دیدگاه | 2 |
تعداد بازدید | 9.6K |
تاریخ انتشار | 24/07/2019 |
تاریخ بروزرسانی | 24/07/2019 |
نویسنده | گروه آموزشی کولاک |