از ساختار Try Except در پایتون برای مدیریت خطاهای استثنای استفاده میشود. این نوع از خطاها در شرایط خاص و غیرعادی هنگام اجرای برنامه رخ میدهند. خود برنامه باید توانایی شناسایی و کنترل این حالتها را داشته باشد. برنامه نویس با پیشبینی حالتهای استثنا مختلف، عکسالعمل مناسب را برای مدیریت خطا تعریف میکند. برنامه نویسان پایتون از بلوکهای Try Except برای مدیریت خطاهای استثنا استفاده میکنند. استفاده از ساختار Try Except در پایتون از خرابی برنامه یا کرش کردن سیستم در زمان روی دادن خطا جلوگیری میکند. این ابزارها به برنامه نویس کمک میکنند که خطاهای اعلام شده توسط مفسر یا سیستم عامل را شناسایی و مدیریت کنند. در نتیجه کدهای نوشته شده از استحکام بیشتری برخوردار شده و برنامه هم کاربرپسندتر میشود.
آنچه در این مطلب میآموزید:
-
روش صحیح نوشتن بلوک Try Except در پایتون را یاد میگیرید.
-
با مهمترین تفاوتهای بین خطاهای استثنا و خطاهای معمولی آشنا میشوید.
-
با تکنیکهای مختلف پیادهسازی بلوک except آشنا شده و برای هر کدام مثالی را بررسی میکنید.
-
با کلمه کلیدی raise آشنا شده و روش استفاده از آن را برای اعلام خطا یاد میگیرید.
-
مهمترین مزایا و معایب استفاده از ساختار Try Except در پایتون را متوجه میشوید.

در این مطلب از مجله فرادرس به بررسی Try Except در پایتون پرداختهایم. ابتدا با سینتکس این ساختار آشنا میشویم. سپس تفاوتهای مهم بین خطاهای استثنا و خطاهای معمولی را بیان میکنیم. بعد از آن روش استفاده از ساختار Try Except در پایتون را با کمک مثالهای سادهای توضیح میدهیم. در نهایت هم مزایا و معایب استفاده از بلوکهای «Try Except» را در پایتون بیان کردهایم.
Try Except در پایتون چه کاربردی دارد؟
در زبان برنامه نویسی پایتون اتفاق افتادن خطاهای معمولی – منطقی یا سینتکسی – و خطاهای استثنا میتوانند اجرای برنامه را با مشکل روبهرو کنند. تفاوت این دو نوع خطا را در بخشهای بعدی گفتهایم.
برای مدیریت خطاهای استثنا در پایتون از ساختار Try Except استفاده میکنیم. وقتی خطایی در بلوک Try اتفاق میافتد، پایتون ادامه اجرای کدهای این بلوک را متوقف میکند. سپس به سراغ بلوک «استثنا» (Exception) میرود. با کمک این بلوک، برنامه نویسان خطاهای اعلام شده را طوری مدیریت میکنند که برنامه کرش نکند.
سینتکس Try Except در پایتون
برای مدیریت خطاهای استثنا در پایتون از بلوکهای try و except و else و finally استفاده میکنیم. در کادر پایین ترتیب قرار دادن این بلوکها را نوشتهایم.
در زمان مدیریت خطاهای استثنا هر کدام از این بلوکها مسئولیت خاصی را برعهده دارند. عملکرد این بلوکها را در فهرست پایین توضیح دادهایم.
- بلوک try: در بلوک try کد اصلی برنامه را مینویسیم. این کد ممکن است در زمان اجرا با یکی از حالتهای استثنا روبهرو شود. کلمه «try» به معنی تلاش کردن است. از آنجا که پایتون تلاش میکند کدهای نوشته شده در این بلوک را اجرا کند نام این بلوک try گذاشته شده است. در صورت رویدادن استثنا و بروز خطا، فرایند اجرای کدها بلافاصله به بلوک except منتقل میشود.
- بلوک except: این بلوک به برنامه نویسان برای مدیریت حالتهای استثنا کمک میکند. اگر کدهای نوشته شده در بلوک try با خطای استثنایی روبهرو شوند، پایتون ادامه اجرای کدها را به بلوک except منتقل میکند. اکنون نوبت اجرای کدهای درون بلوک except است. برنامه نویسان میتوانند استثناهای خاص را به صورت جداگانه مدیریت کنند. همچنین امکان استفاده از یک بلوک کلی برای دریافت و کنترل تمام خطاهای استثنایی نیز وجود دارد. این روش را در بخشهای بعدی مطلب با کمک مثال بررسی کردهایم.

- بلوک else: استقاده از بلوک else اختیاری است. اما اگر از این بلوک استفاده کردیم باید بعد از همه بلوکهای except قرار بگیرد. بلوک else فقط وقتی اجرا میشود که بلوک try با هیچ خطا و حالت استثنایی روبهرو نشده باشد. گاهی از اوقات میخواهیم که اگر کدهای بلوک try بخوبی و بدون مشکل اجرا شدند، دستهای از کدهای دیگر هم اجرا شوند. استفاده از بلوک else روش مناسبی برای اجرای آن دسته از کدها است.
- بلوک finally: کدهای نوشته شده در بلوکfinally همیشه اجرا میشوند. بدون در نظر گرفتن اینکه آیا حالت استثنایی رخ داده است یا نه. به طور کلی از این کدها برای اجرای «عملیات پاکسازی» (Cleanup Operations) استفاده میکنیم. عملیات پاکسازی به کارهایی مانند بستن فایلها یا آزاد کردن منابع گفته میشود.

در کادر پایین، مثالی برای استفاده از بلوکهای معرفی شده در بالا پیادهسازی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
You can't divide by zero! Execution complete.
در فهرست پایین، تمام عملیات کدهای بالا را توضیح دادهایم.
- بلوک try: در این بلوک از کاربر خواستهایم عددی را وارد کند. سپس عدد وارد شده توسط کاربر را بر عدد 100 تقسیم میکنیم.
- بلوک except: در این بخش از دو بلوک except استفاده کردهایم. با کمک این بلوکها حالتهای استثنای مربوط به خطای تقسیم بر صفر «ZeroDivisionError» و نامعتبر بودن داده ورودی «ValueError» را مدیریت کردیم.
- بلوک else: اگر هیچ خطایی رخ نداد کدهای درون بلوک else اجرا میشوند. در این کد، دستور دادهایم که نتیجه اجرای برنامه بر روی خروجی چاپ شود.
- بلوک finally : همینطور که میدانیم کدهای این بلوک بدون توجه به مقدار نهایی خروجی چاپ میشوند. با کمک این کدها به کاربر نشان میدهیم که اجرای برنامه به پایان رسیده است.
مثالی از مدیریت خطای ساده در پایتون
به کار بردن تکنیکهای مدیریت خطا در پایتون از کرش کردن برنامهها در زمان اجرا جلوگیری میکند. در این بخش از برنامه، مثال سادهای از بروز خطاهای کوچک و روش دریافت و مدیریت صحیح آنها را بررسی کردهایم.
بعد از اجرای کدهای بالا و بروز خطا، خروجی زیر در کنسول پایتون به نمایش در میآید.
Can't be divided by zero!
در مثال بالا تقسیم عدد بر صفر باعث بروز خطا شده است. به این خطا در پایتون ZeroDivisionError گفته میشود. بلوک try شامل کدیست که شاید در زمان اجرا با خطای استثنا روبهرو شود. بلوک except هم کدی است که وظیفه مدیریت خطای احتمالی را برعهده دارد. در این برنامه، بلوک except را طوری طراحی کردهایم که در زمان روی دادن خطای تقسیم بر صفر، برنامه متوقف نشود. در عوض، پیغام خطای مناسبی در خروجی چاپ میشود.
یادگیری پایتون با کمک فیلمهای آموزشی فرادرس
زبان برنامه نویسی پایتون از زمان انتشار به طور دائم در حال پیشرفت و توسعه است. پایتون به دلیل سادگی و قدرت زیاد به یکی از پرطرفدارترین زبانهای برنامه نویسی در دنیا تبدیل شده است. پایتون را میتوان به سادگی آموخت اما برای آموزش اصولی آن بهتر است که از اساتید حرفهای کمک بگیرید. اگر در ابتدای مسیر یادگیری پایتون هستید پیشنهاد میکنیم فیلم رایگان آموزش پایتون، برنامه نویسی سریع و آسان در ۱۴۰ دقیقه + گواهینامه را از فرادرس مشاهده کنید. استفاده از منابع یادگیری قدرتمند مانند فیلمهای آموزشی، کمک بسیار زیادی میکند. زیرا فیلمهای آموزشی، نسبت به سایر منابع از کیفیت و بازدهی بیشتری برخوردار هستند.

فرادرس بزرگترین تولید کننده محتوای آموزشی آنلاین در کشور است. این وبسایت برای تولید فیلمهای آموزشی پایتون، برنامهریزی ویژهای کرده است. محتوی آموزشی فرادرس از کیفیت بالایی برخوردار هستند. فیلمهای آموزشی فرادرس از مطالب بسیار ساده و ابتدایی تا مفاهیم پیشرفتهای مانند شبکههای عصبی و یادگیری ماشین را پوشش میدهند. استفاده از این فیلمها بسیار مقرونبهصرفه است،. مخصوصا در مقایسه با سایر روشهای آموزش مانند کلاسهای حضوری ارزش افزوده بیشتری دارد. در پایین، چند مورد از فیلمهای آموزش پایتون را معرفی کردهایم.
تفاوت بین استثنا و خطا در پایتون چیست؟
در این بخش از مطلب،خطای استثنا را با دیگر خطاها مقایسه کردهایم. مهمترین تفاوتهای «خطا» (Error) و استثنا» (Exception) در فهرست زیر نوشته شدهاند.
- «خطا» (Error): خطا به مشکلات جدی گفته میشود. برنامهها نباید این مشکلات را مدیریت کنند. خطا معمولا مشکلی در منطق کد یا پیکربندی برنامه است. خود برنامه نویس باید خطاها را تعمیر و رفع کند. به عنوان مثالهایی از این دسته خطاها میتوانیم به خطای مربوط به سینتکس یا مدیریت حافظه اشاره کنیم.
- «استثنا» (Exception): شدت مشکل بوجود آمده توسط استثنا کمتر از خطا است. در نتیجه خود برنامهها هم میتوانند استثاناها را مدیریت کنند. این نوع از مشکلات ممکن است در موقعیتهای مختلفی پیشبیایند. برای مثال اگر کاربری دادههای ورودی نامعتبر وارد کند. یا فایلهایی در برنامه گم شوند. یا مشکلاتی در شبکه به وجود بیایند.
در کاد پایین برای هر کدام از موارد بالا، مثالی را پیادهسازی کردهایم. در خط اول خطا و در خط دوم استثنا رخ میدهد.
«خطای نحوی یا سینتکس» (Syntax Error) به دلیل اشتباه در کدنویسی اتفاق میافتد. وجود این خطا از اجرا شدن کدهای برنامه جلوگیری میکند. اصلا نمیتوان چنین خطایی را در برنامه مدیریت کرد. این خطا باید توسط برنامه نویس و به صورت دستی رفع شود. در عوض خطای استثنایی مانند ZeroDivisionError – که بر اثر تقسیم بر صفر روی میدهد – را میتوان در طول اجرای برنامه مدیریت کرد. برای مدیریت استثناها از بلوک Try Except در پایتون استفاده میکنیم.
روش استفاده از Try Except در پایتون
از ساختار Try Except در پایتون برای دریافت و مدیریت انواع خطاهای استثنا استفاده میکنیم. در بخش بعدی مطلب، رایجترین خطاهای استثنا در پایتون را معرفی کردهایم. در این بخش، روش استفاده از بلوکهای try و except و else و finally را آموزش میدهیم.
یکی از بهترین روشهای یادگیری استفاده از بلوکهای try و except و else و finally، پیادهسازی آنها در پروژههای عملی است. با این تکنیک دانشجویان میتوانند تمام مهارتهای خود را به صورت عملی استفاده کنند. برای رسیدن به این هدف پیشنهاد میکنیم که فیلم آموزش برنامه نویسی پایتون همراه با بررسی مثال های عملی در Python + گواهینامه را از فرادرس مشاهده کرده و در مثالهای مختلف از ساختار Try Except در پایتون استفاده کنید. برای کمک به مخاطبان مجله لینک این فیلم آموزشی را در پایین نیز قرار دادهایم.
بلوک try چگونه کار میکند؟
بلوک try را برای بررسی کدهایی به کار میبریم که احتمال بروز خطا در آنها وجود دارد، یعنی کدهای اصلی برنامه. اگر هیچ خطایی در برنامه نباشد، فقط کدهای نوشته شده در بلوک try اجرا میشوند. در حالی که اگر کدهای بلوک try با خطای استثنا روبهرو شوند، کدهای درون بلوک except اجرا میشوند.

در فهرست پایین، روش کار بلوک try را به شکل دقیق، توضیح دادهایم.
- ابتدا کدهای عبارت try اجرا میشوند.
- اگر در زمان اجرای این کدها هیچ خطای استثنایی رخ نداد، فقط بلوک try اجرا خواهد شد. عبارت except نادیده گرفته میشود.
- اما اگر هر خطای استثنایی رخ بدهد، ادامه کار در بلوک try رها شده و برنامه به سراغ اجرای بلوک except میرود.
- اگر خطای استثنای اعلام شده توسط بلوک except مدیریت نشده بود، روند اجرای برنامه به بلوک try خارجی – به شرط اینکه وجود داشته باشد – سپرده میشود. اگر برای مدیریت خطای استثنا، هیچ رفتاری برنامهریزی نشده بود، اجرای برنامه متوقف میشود.
- هر بلوک try میتواند چندین بلوک except مختلف داشته باشد.
در کادر زیر، مثال سادهای را درباره اجرای بلوکهای Try Except در پایتون، پیادهسازی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Yeah ! Your answer is : 1
در کدهای بالا هیچ حالت استثنایی رخ نداده است. اما در مثال زیر، برنامه با خطا روبهرو میشود. در این مثال میتوانیم عملکرد بلوک except را بررسی کنیم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Sorry ! You are dividing by zero
در کدهای زیر، روش دیگری از نوشتن بلوک except را بررسی کردهایم. در این حالت بلوک except فقط خطاهایی را دریافت و مدیریت میکند که برنامه نویسی کردهایم. این تکنیک به توسعهدهندگان کمک میکند تا بفهمند چه خطایی رخ داده است.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
The error is: unsupported operand type(s) for //: 'int' and 'str' The error is: integer division or modulo by zero
بلوک Else چگونه کار میکند؟
برنامه نویسان پایتون میتوانند از بلوک else در ادامه ساختار Try Except استفاده کنند. بلوک else باید بعد از تمام بلوکهای except قرار بگیرد. کدهای درون بلوک else فقط به شرطی اجرا میشوند که در زمان اجرای کدهای try هیچ خطایی رخ نداده باشد. در پایین، روش نوشتن این بلوک را نشان دادهایم.
در کدهای زیر، مثالی برای استفاده از بلوک else نوشتهایم. این بخش باید بعد از بلوکهای Try Except در پایتون قرار بگیرد.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
-5.0 a/b result in 0
بلوک Finally چگونه کار میکند؟
در پایتون، کلمه کلیدی با عبارت finally تعریف شده است. از این کلمه کلیدی برای تعریف بلوک خاصی از کدها استفاده میکنیم. این بلوک بعد از بلوکهای try و except و else قرار میگیرد. تفاوتی نمیکند که کدهای بلوک try با موفقیت اجرا شده باشند یا به دلیل بروز خطا برنامه متوقف شده باشد. کدهای بلوک finally همیشه اجرا میشوند.

در کادر پایین، سینتکس مربوط به روش قرار دادن این بلوک در ساختار Try Except را نوشتهایم.
در کدهای زیر روش استفاده از این بلوک را نشان دادهایم. ابتدا خطای استثنای تقسیم بر صفر در بلوک try اتفاق میافتد. سپس در بلوک except این خطا را دریافت کرده و پیغام مناسبی برای آن نمایش میدهیم. در آخر هم کدهای نوشته شده در بلوک finally اجرا میشوند.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Can't divide by zero This is always executed
رایجترین حالتهای استثنا در پایتون
در زبان برنامه نویسی پایتون تعداد زیادی خطای استثنا از قبل پیشبینی و تعریف شدهاند. هر کدام از این حالتهای استثنا شرط خطای مشخصی را نشان میدهند. بعضی از رایجترین آنها را در فهرست زیر معرفی کردهایم.
- BaseException: این حالت، کلاس پایهای است که تمام خطاهای استثنای «درونی» (Built-In) پایتون از آن مشتق شدهاند.
- Exception: کلاس پایه برای تمام خطاهای استثنایی است که باعث توقف برنامه نمیشوند.
- ArithmeticError: کلاس پایه برای تمام خطاهای استثنایی که به عملیات ریاضی مربوط میشوند.
- ZeroDivisionError: این خطای استثنا وقتی اعلام میشود که در عملیات تقسیم در پایتون «//» یا باقیمانده صحیح «%» مقسومعلیه صفر باشد.
- OverflowError: این حالت، زمانی اعلام میشود که نتیجه عملیات عددی از بیشینه مقدار در آن نوع داده، بیشتر شود.
- FloatingPointError: هر وقت عملیات مربوط به اعداد اعشاری با شکست روبهرو شود این حالت پیش میاید.
- AssertionError: زمانی رخ میدهد که دستور assert با شکست مواجه شود.
- AttributeError: این حالت زمانی روی میدهد که ارجاع یا تخصیص ویژگی با شکست روبهرو شود.
- IndexError: زمانی روی میدهد که در یک عملیات به اندیس خارج از محدوده در دنباله – مانند لیست یا تاپل – اشاره کنیم.
- KeyError: وقتی اعلام میشود که کلید مورد نظر در دیکشنری پیدا نمیشود.
- MemoryError: وقتی این حالت رخ میدهد که عملیات محاسباتی خاصی با کمبود حافظه روبهرو شود.
- NameError: وقتی که نام محلی یا جهانی پیدا نشود این حالت استثنا رخ میدهد.
- OSError: اگر یکی از وظایف سیستمی مانند خواندن یا نوشتن اطلاعات بر روی فایلها با شکست روبهرو شود این خطا روی میدهد.
- TypeError: این خطا زمانی روی میدهد که از توابع بر روی دادههای با نوع اشتباه استفاده کنیم.
- ValueError: این حالت وقتی اتفاق میافتد که تابعی به درستی فراخوانی شده است. اما دادههای ارسال شده به آن – به عنوان پارامتر – غلط باشند.
- ImportError: این خطا زمانی روی میدهد که در عبارت import اشتباهی انجام داده باشیم.
- ModuleNotFoundError: این خطای استثنا وقتی اعلام میشود که مفسر پایتون موفق به پیدا کردن ماژول مورد نظر نشود.
نکته: کلاسه پایه به معنای آن است که بقیه کلاسها از این کلاس ارثبری میکنند. یعنی آنکه هر کلاس استثنای باید با استفاده از رابطه وراثت در پایتون با این کلاس مرتبط شود. بنابراین برنامه نویس پایتون برای تعریف حالتهای استثنای مورد نظر خود باید ارثبری را هم بلد باشد. برای آشنایی کامل با این مفهوم پیشرفته، پیشنهاد میکنیم که مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.

شناسایی حالتهای استثنا به کمک Try Except در پایتون
در زمان کار بر روی کدهای پایتون، برنامه نویس میتواند انواع حالتهای استثنا را پیشبینی کند. برای مدیریت هرچه بهتر این خطاها بهتر است برای هر کدام از استثناها بلوک except جداگانه ای تنظیم کنیم. این روش باعث میشود که کدهای برنامه سالمتر و امنتر باشند. همچنین فرایند خطایابی نیز سادهتر و سریعتر انجام میشود.
گرفتن خطاهای استثنای مشخص
شناسایی حالتهای استثنا به صورت جداگانه، باعث میشود که برنامه با خطاهای مختلف به روشهای متفاوتی برخورد کند.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Not Valid!
در کدهای بالا ابتدا خطای استثنا ValueError روی میدهد. زیرا برنامه نمیتواند رشته s”str” را به عدد صحیح تبدیل کند. اگر مقدار x برابر با ۰ باشد عملیات تبدیل نوع با موفقیت انجام میشود. در این حالت هم خطای استثنای ZeroDivisionError روی میدهد. زیرا تقسیم بر صفر در محاسبات برنامه نویسی باعث روی دادن خطا میشود.
گرفتن چند استثنای مختلف به صورت هم زمان
شاید بخواهیم که چند خطای استثنای مختلف را به روش یکسانی مدیریت کنیم. در چنین مواقعی میتوانیم یک بلوک except را برای گرفتن چند حالت استثنا مختلف به کار ببریم. اما اگر بخواهیم در مقابل روی دادن هر خطای استثنا عکسالعمل متفاوتی از خود نشان دهیم، باید از چند بلوک except مختلف نیز استفاده کنیم.
در کادر پایین از هر دو روش استفاده کردهایم. ابتدا در بلوک except بالایی دو خطای استثنا به روش یکسانی مدیریت شدهاند. در بلوک except دوم هم حالت استثنای «عبور از محدوده اندیس» یا IndexError به صورت جداگانه مدیریت شده است.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Error invalid literal for int() with base 10: 'twenty'
در کدهای بالا سه نوع خطای استثنای مختلف روی میدهند. این خطاها را در فهرست پایین نوشتهایم.
- وقتی که برنامه مقدار twenty را به عدد صحیح تبدیل کند، خطای ValueError رخ میدهد.
- اگر عملیات نوشته شده در برنامه بر روی مقادیری با نوع غیر عدد صحیح انجام شود، خطای TypeError رخ میدهد. اما در این کد این خطا روی نمیدهد. زیرا برنامه به درستی نوشته شده است.
- اگر برنامه بخواهد به اندیسی خارج از محدودهی لیست دسترسی پیدا کند، خطای IndexError روی میدهد. اما در سناریو کد بالا این مسئله هم مدیریت شده است.

مدیریت تمام حالتهای استثنا در یک بلوک
در این بخش، روش مدیریت تمام حالتهای استثنا را در یک بلوک except بررسی کردهایم. برای انجام این کار از مثال کوچکی استفاده میکنیم. در این مثال، محاسبات سادهای انجام شده است. اما این محاسبات ممکن است با چند خطای مختلف روبهرو شود.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Something went wrong!
خطای ArithmeticError شامل موارد مختلفی است. یکی از زیرمجموعههای این خطا، حالت استثنای ZeroDivisionError است. این خطاها زمانی روی میدهند که اشتباهی در تقسیم اعداد اتفاق بیافتند. در کدهای بالا بهجای این خطا، خطای استثنای TypeError اتفاق افتاد. این خطا بخاطر آن است که مقداری با نوع دادهی اشتباه را تقسیم کردهایم. در واقع در این مثال، مقداری با نوع رشته را بر مقداری با نوع عدد صحیح تقسیم میکنیم.
در بلوک دوم except هیچ نوع خطایی را به صورت مشخص معرفی نکردهایم. به این نوع از بلوکهای except ، بلوک «Catch-All Except» گفته میشود. زیرا از این بلوک برای مدیریت تمام حالتهای استثنای نامبرده نشده در بالا استفاده میکنیم. با کمک این بلوک در کدهای بالا خطای TypeError را مدیریت میکنیم. اما استفاده از این تکنیک میتواند باعث بروز مشکل شود. زیرا دیگر پیغام واضحی در زمان روبهرو شدن با حالتهای استثنا وجود ندرد. در نتیجه، برنامه نویس، دلیل واقعی خطا را تشخیص نمیدهد.
یادگیری پیاده سازی پروژه های پایتون با کمک فیلمهای فرادرس
بعد از پشت سر گذاشتن آموزشهای ابتدایی پایتون لازم است با مفاهیم پیشرفتهتری آشنا شویم. یکی از راههای خوب یاد گرفتن مفاهیم پیشرفته، استفاده از آنها در پروژههای نزدیک به دنیای واقعی است. فرادرس، به عنوان بزرگترین و معتبرترین تولیدکننده محتوای آموزشی فارسی، مجموعه متنوعی از فیلمهای آموزشی پروژه محور را برای پایتون فراهم کرده است. فیلمهای پروژهمحور به دانشجویان کمک میکنند تا مهارتهای برنامهنویسی مختلف را به صورت عملی و در کنار هم یاد بگیرند. با مشاهده آموزشهای پروژهمحور آماده ورود به بازار کار میشوید. حتی میتوانید ایدههای شخصی خود را پیادهسازی کنید.
در پایین، چند مورد از فیلمهای آموزش پروژهمحور زبان پایتون را معرفی کردهایم.
در صورت تمایل با کلیک بر روی تصویر زیر به صفحه اصلی این مجموعه آموزشی، هدایت شده و از فیلمهای پروژهمحور بیشتری دیدن کنید.

اعلام کردن حالت استثنا
در زبان برنامه نویسی پایتون برای ایجاد حالت استثنا از کلمه کلیدی raise استفاده میکنیم. ابتدا کلمه کلیدی raise را نوشته و بعد از آن هم شیئی از کلاس استثنای مورد نظر را در ادامه آن قرار میدهیم. اعلام کردن حالت استثنا یعنی آنکه در وضعیت سفارشی و دلخواهی بهجای ادامه اجرای عادی برنامه، خطای مشخصی ایجاد کنیم. در این حالت میتوانیم از استثناهای پیشفرض پایتون استفاده کنیم.
برای انجام این کار نه تنها میتوانیم از حالتهای استثنای درونی پایتون استفاده کنیم. بلکه، برنامه نویس میتواند خطای استثنای سفارشی خودش را نیز تنظیم کند. برای انجام دادن این کار باید کلاس جدیدی تعریف کنیم. این کلاس باید از کلاس درونی Exception در پایتون ارثبری کند.
سینتکس پایه برای اعلام کردن حالت استثنای دلخواه را در کادر زیر نوشتهایم.
روش استفاده از این سینتکس را در کادر زیر و به کمک مثال سادهای بررسی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول پایتون نشان داده میشود.
Age cannot be negative.
در کدهای بالا تابع set منفی بودن مقدار سن age را بررسی میکند. اگر مقدار داده شده به تابع – به عنوان سن – منفی بود، حالت استثنای ValueError توسط تابع اعلام میشود. در زمان اعلام این حالت، پیغامی هم برای نشان دادن دلیل خطا تنظیم شده است. این ساختار، باعث میشود که هیچ وقت مقدار سن، عدد منفی نباشد. در نتیجه یکپارچگی دادهها حفظ میشود.
مزایا و معایب Try Except در پایتون
تمام ساختارهای تعریف شده در زبان برنامه نویسی پایتون برای انجام وظایف منحصربهفردی توسعهداده شدهاند. استفاده از این ساختارها باعث انسجام و تقویت هرچه بیشتر کدها میشود. اما به هرحال هر ابزاری دارای نقاط ضعفی هم هست.
در این بخش از مطلب مزایا و معایب استفاده از ساختارهای Try Except در پایتون را بررسی کردهایم.
مزایای استفاده از Try Except در پایتون
در ابتدا مزیتهای این ساختار را توضیح دادهایم. وجود این مزیتها علت اصلی استفاده از Try Except در پایتون هستند.
- افزایش خوانایی برنامه: با مدیریت مناسب خطاهای استثنا میتوانیم از کرش کردن برنامهها جلوگیری کنیم. با استفاده از این ساختار میتوانیم از بوجود آمدن نتایج غلط بر اثر خطاهای ناخواسته یا دادههای ورودی اشتباه هم پیشگیری کنیم.
- سادهسازی عملیات مدیریت خطا: با استفاده از بلوکهای Try Except در پایتون، بخش مربوط به مدیریت خطا از بدنه اصلی کدها جدا میشود. در نتیجه درک و خواندن منطق برنامه و کدها سادهتر شده و نگهداری آنهم راحتتر میشود.
- نوشتن کدهای تمیزتر: به کمک تکنیکهای مدیریت استثنا در پایتون، برنامه نویسان از به کار بردن عبارتهای شرطی پیچیده برای بررسی خطا بینیاز میشوند. در نتیجه، کدها سادهتر، خواناتر و حرفهایتر نوشته میشوند.
- دیباگ کردن سادهتر کدها: وقتی که خطای استثنایی اعلام میشود، مفسر پایتون بر روی کنسول پیغامی چاپ میکند. این پیغام، محل دقیق وقوع خطای استثنا را نشان میدهد. در نتیجه اشکالزدایی کد آسانتر میشود.
معایب استفاده از Try Except در پایتون
در این قسمت از مطلب، معایب استفاده از Try Except در پایتون را شمردهایم. به عنوان برنامه نویس لازم است که با این معایب آشنا شویم. بنابراین در زمان استفاده از آنها به مشکل برنمیخوریم.
- عملکرد کندتر: استفاده از بلوکهای Try Except در پایتون برای بررسی خطاها نسبت به عبارت if کندتر است. این مسئله بخاطر آن است که مفسر پایتون برای شناسایی و مدیریت استثناها باید عملیات بیشتری انجام دهد.
- افزایش پیچیدگی کدها: استفاده زیاد از ساختارهای مدیریت خطا ممکن است خوانایی کد را کاهش دهد. این مشکل به طور خاص زمانی اتفاق میافتد که توسعهدهنده بخواهد چند نوع خطای مختلف را مدیریت کرده یا از قوانین پیچیدهای استفاده کند.
- احتمال وقوع خطرهای امنیتی: اگر خطاهای استثنا را به درستی مدیریت نکنیم، احتمال دارد اطلاعات محرمانهای درباره کدها در کنسول به نمایش گذاشته شود. در نتیجه امنیت برنامه به خطر میافتد. بنابراین مدیریت صحیح حالتهای استثنا از اهمیت بسیار زیادی برخوردار است. نباید اطلاعات اضافی درباره برنامه و عملکرد آن نمایش داده شود.

جمعبندی
در این مطلب از مجله فرادرس با بلوکهای Try Except در پایتون آشنا شدهایم. این ابزار برای مدیریت خطاهای حالت استثنا به کار برده میشود. شکل کامل آن شامل بلوکهای try و except و else و finally است. کدهای اصلی برنامه را در بلوک try قرار میدهیم. سپس انواع استثناهای احتمالی را با کمک بلوکهای except مدیریت میکنیم. از بلوک else برای زمانی استفاده میکنیم که کدهای اصلی برنامه – در بلوک try - بدون مشکل اجرا شدند. کدهای درون بلوک finally هم بدون توجه به اجرای صحیح کدها یا رویدادن خطا در هر حالتی اجرا میشوند.
برنامه نویسان پایتون لازم است که روش صحیح استفاده از این ساختار را بلد باشند. با کمک بلوکهای Try Except در پایتون، هم میتوانیم خوانایی برنامه را بیشتر کنیم و عملیات مربوط به مدیریت خطا را سادهتر. این ساختارها باعث مستحکمتر شدن برنامه نوشته شده میشوند. درنتیجه برای ساخت برنامههای کاربردی باید استفاده از این ساختارها را بلد باشیم و به صورت درست آنها را به کار ببریم.
source