آموزش دستور try … except در پایتون (python) + مثال

دستور try … except برای مدیریت خطا در پایتون (python) بکار میره! که ما در این مطلب به طور کامل با مثال‌های متعدد بررسیش می‌کنیم!

مثال ۱

در این مثال به طور کلی سعی می‌کنیم مفهوم دستور try … except دستمون بیاد! تا در مثال های بعدی بتونیم مانور بیشتری بدیم!

خب قطعه کد زیر رو درنظر بگیرید!

قبول دارید اگر این خط کد رو اجرا کنیم، قطعاً بهمووون خطا میده؟! [باید بگید بله قبول داریم! چون مگه میشه یک عدد رو بر صفر تقسیم کرد؟! نمیشه دیگه! چون این کار از لحاظ ریاضی غلطه!]

پس نتیجه اجرای خط بالا، خطایی به شرح زیر است!

اسم خطا رو هم اگر در خطای بالا نگاه کنید می‌بینید که نوشته! (نوشته: ZeroDivisionError یعنی خطای تقسیم بر صفر!)

چرا با اسم این خطا کار داریم رو جلوتر می‌بینید! فقط اسمش رو الان حفظ کنید تا آخر مطلب!

خب حالا ما می‌خوایم اگر همچین خطایی پیش اومد، بگه: “شما نمی‌تونید یک عدد رو به صفر تقسیم کنید”!

برای اینکار باید قطعه کد زیر رو در نظر بگیرید، تا در ادامه توضیحش بدم!

خب! به زبان خودمووونی این خط کد اینجوری تعبیر میشه!:

بیا زووور بزن که print کنی ۱۴/۰ رو!

اگر نشد، بیا print کن که : “You cannot divide a number by 0!”

که معنی اون جمله انگلیسی هم که نوشتیم میشه!: «شما نمی‌توانید یک عدد رو به صفر تقسیم کنید!»

try یعنی زووور زدن! امتحان کردن! و except هم یعنی «مگر، بجز» که ما به صورت «اگر نشد» در خط بالا گفتیم!

خب این از بیان غیر رسمی دستور try … except ! حالا بریم به زبان رسمی هم همین‌ها رو بگیم!

بیان رسمی …!

در بخش try میایم، کدی که قرار است به صورت عادی اجرا شود را وارد می‌کنیم!

در بخش except میایم کدهایی که در صورت بروز خطا باید اجرا شود رو وارد می‌کنیم!

این هم از زبان رسمی دستور try … except !

مثال ۲

قبل از شروع رسمی مثال ۲، بیاید کد زیر رو در پایتون (python) بزنیم، ببنیم چی میگه!

پایتون بعد از اجرای این کد شاکی میشه! و خطا میده که!:

خب یه یادآوری بکنم به در زبان برنامه نویسی پایتون، باید بنویسیم True و نه TRUE ! (بر خلاف زبان برنامه نویسی R !) که اگر نمی‌دونید اصلاً این متغیر True چیست، باید به آموزش انواع متغیرها در پایتون مراجعه کنید! [پس دلیل این شاکی شدن python این بود!]

راستی به اسم خطا که در اون آخر نوشته، توجه کنید! که نوشته NameError! چرا هِی با اسم این خطاها کار داریم رو جلوتر می‌بینید!

پس با این وجود الان دو تا خطا داریم! یکی اینکه اسم True رو به صورت اشتباه نوشتیم! دوم اینکه نباید عددی رو به صفر تقسیم کنیم!

شاید بگید خب بیایم از دستور try… except استفاده کنیم! به صورت زیر!

اما قبول دارید چیزی که نوشتیم، خیلی درست نیست؟! چون توی بخش except، باید در اصل بگیم، اگر خطا مربوط به تقسیم بر صفر بود، خطا بده که «عدد رو نمیشه بر صفر تقسیم کرد!» اما اگر خطا بخاطر اسمِ اشتباه بود، بگه: آقای محترم! توی پایتون چیزی به اسم TRUE تعریف نشده!

بهبود کُد نوشته شده … !

یعنی باید در اصل کدی بنویسیم، که میزانی از فهم و شعور رو داشته باشه که بسته به نوع خطا، واکنش‌های متفاوتی از خودش نشون بده! نه اینکه واسه همه انواع خطا یه چیز بگه!!!

پس میایم مثلاً همین رو به صورت زیر می‌نویسیم!

حالا کدمون با شعورتر شده! و بسته به نوع خطا، واکنش متفاوت نشون میده! قطعه که بالا به زبون خودمووونی میشه!:

زور بزن که متغیری به اسم a تعریف کنی با مقدار TRUE! و همچنین print کنی ۱۴/۰ رو!

اگر نشد و دلیل این نشدن، خطای نوع 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 رو اسم‌هاشون رو از کجا فهمدیم؟! جواب اینه که: «اگر برگردید مطلب رو از اول بخونید، می‌بینید دوجا با این دو اسم روبرو شدیم! که هر دوجا هم تاکید کردم، این اسم ها رو یادتون باشه، بعداً کارشون دارید! اون بعداً دقیقاً همینجا بود!»