مسیر رتبه‌برترشدن در کنکور ارشد مهندسی کامپیوتر و IT
ثبت‌نام رایگان
مدت زمان باقیمانده :
ثانیه -
دقیقه -
ساعت -
روز -
کنکور کامپیوتر
0
ورود | ثبت نام
نظرات
اشتراک
بالا
علاقه‌مندی

اشتراک
 

مدیریت استثنا یا Exception Handling در برنامه نویسی چیست

این صفحه عالی توضیح داده که مدیریت استثنا یا Exception Handling در برنامه نویسی چیست و نحوه مدیریت استثنا ها در زبان های برنامه نویسی را بیان کرده است

مدیریت استثنا به فرآیندی اشاره دارد که به بررسی و حل استثناهای ناخواسته و یا غیر قابل انتظاری که باعث به‌وجود آمدن مشکلاتی در سیستم‌های کامپیوتری می‌شود می‌پردازد. با مدیریت کردن صحیح استثناها، از به‌وجود آمدن اختلال و به‌اصطلاح کرش کردن سیستم در آینده جلوگیری می‌کنیم. بدون مدیریت کردن استثناها، عملکرد یک برنامه مختل شده و از حالت عادی خارج می‌شود.

تابلوی مثلث خطر با عنوان Exception Handling

استثنا یا Exception به دلایل مختلفی به‌وجود می‌آید. در زیر برخی از موارد پدید آمدن استثنا را مشاهده می‌کنید:

زمانی که یک استثنا رخ داد، ساختارهای نوشته شده توسط زبان های برنامه نویسیزبان های برنامه نویسی چیست؟زبان های برنامه نویسی چیست؟این مقاله عالی توضیح داده که زبان های برنامه نویسی چیست؟ و انواع زبان های برنامه نویسی و بهترین زبان برنامه نویسی برای شروع و پردرآمدترین آنها را معرفی کرده، یک وقفه سخت افزاری (Interrupt) به‌وجود می‌آورند و به‌وسیله امکانات موجود در OS یا سیستم عاملسیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟سیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟این مقاله عالی به معرفی سیستم عامل (Operating System|OS) به زبان ساده پرداخته، همچنین بررسی کرده که چرا باید از سیستم عامل استفاده کنیم ، این استثنا مدیریت می‌شود. توجه کنید که استثنا با باگمعنی باگ چیست | باگ یعنی چه؟ | انواع باگ های نرم افزاریمعنی باگ چیست | باگ یعنی چه؟ | انواع باگ های نرم افزاریاین مقاله عالی به توضیح معنی باگ (bug)، معرفی انواع باگ های نرم افزاری، توضیح آنکه چگونه از پدید آمدن باگ جلوگیری کنیم؟ و در نهایت نحوه رفع باگ پرداخته و خطا در برنامه نویسیبرنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟برنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟در عصر فعلی برنامه‌نویسی یکی از پرطرفدارترین شغل‌های دنیاست، دغدغه‌‌ای افرادی که می‌خواهند در مسیر برنامه‌نویس شدن قدم بردارند این است که نمی‌دانند از کجا باید شروع کنند، در این صفحه هر آن چه برای تبدیل شدن به یک برنامه نویس حرفه ای نیاز دارید در اختیارتان قرار گرفته است تفاوت دارد. به‌همین منوال مدیریت استثنا با اشکال زدایی (Debugging)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)دیباگ چیست؟ معرفی روش‌‌ها و ابزارهای دیباگینگ(اشکال زدایی)این مقاله عالی مفاهیم دیباگ (debug)، دیباگینگ (Debugging) یا همان اشکال زدایی، دیباگر (Debugger) را معرفی و همچنین روش‌‌ها و ابزارهای دیباگینگ را بررسی کرده فرق می‌کند و هدف این دو حوزه کاملا مستقل از یکدیگر است.

استثناها چگونه مدیریت می‌شوند؟

فرض کنید یک برنامه از تعداد زیادی عبارت (Statement) تشکیل شده باشد. اگر در وسط کد یک استثنایی رخ دهد، عبارت‌های بعد از استثنا دیگر اجرا نخواهند شد و در واقع برنامه کرش می‌کند و از اجرا می‌ایستد. برای جلوگیری از این اتفاق، استثناها باید مدیریت شوند. استثناها می‌توانند Catch شوند. Catch به‌معنی گرفتن است، در واقع وقتی استثنایی رخ دهد، بلوک catch که در اکثر زبان‌های برنامه‌نویسی وجود دارد، آن استثنای به‌وجود آمده یا به‌اصطلاح پرتاب شده (Throw) را می‌گیرد. به‌وسیله کدهای نوشته شده در قسمت catch، قادر هستیم تا استثناهای به‌وجود آمده را مدیریت و کنترل کنیم. پارامترهای مربوط به بلاک catch، می‌توانند نوع استثنا را نیز مشخص کنند؛ به‌عنوان مثال آیا استثنا از نوع تقسیم بر 0 است؟ آیا تلاش برای دسترسی به فایلی که وجود ندارد است؟ و...

قسمت دیگری که در برنامه‌نویسی برای مدیریت استثنا وجود دارد، بلوک try است، آن قسمت از کدهایی که ممکن است منجر به ایجاد استثنا شوند، باید داخل بلوک try نوشته شوند تا بتوان در صورت ایجاد استثنا آن را کنترل کرد؛ بنابراین بلوک try کدهایی که مستعد ایجاد استثنا هستند را در خود جا می‌دهد. در صورت ایجاد شدن یک استثنا بلوک catch اجرا می‌شود اما اگر استثنایی ایجاد نشد، کدهای catch اجرا نخواهند شد. همانطور که در تصویر زیر مشخص است، در بلوک try یک استثنا شناسایی (Detect) می‌شود و به بلوک catch پرتاب (Throw) می‌شود تا مدیریت شود.

نحوه مدیریت استثنا به وسیله بلوک های try-catch

مدیریت استثنا در زبان های برنامه نویسی

اگرچه ماهیت و عملکرد مدیریت کردن استثناها در زبان‌های برنامه‌نویسی یکسان است اما در نوع پیاده‌سازی و ویژگی آنها کمی با یکدیگر تفاوت دارند؛ به‌عنوان مثال در زبان برنامه نویسی Cزبان برنامه نویسی C – مزایا و کاربرد زبان C – فرق C و ++Cزبان برنامه نویسی C – مزایا و کاربرد زبان C – فرق C و ++Cاین مقاله عالی ابتدا توضیح می‌دهد که زبان برنامه نویسی c چیست، سپس به بررسی مزایا و معایب زبان C ، کاربردهای زبان سی ، و تفاوت بین C و ++C می‌پردازد  بلوک catch all وجود دارد که امکان گرفتن انواع استثناها در آن وجود دارد. این قابلیت در زبان برنامه نویسی جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است وجود ندارد یا به‌عنوان مثالی دیگر در زبان C++‎برنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++‎؟برنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++‎؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده می‌توان علاوه بر آبجکت‌ها، اشاره‌گر یا Pointer هم به بلوک catch فرستاد در حالی که در زبان‌های دیگر مانند جاوا این امر ممکن نیست. برخلاف زبان C++، زبان جاوا علاوه بر بلوک‌های try و catch دارای یک بلوک دیگر با نام finally می‌باشد که چه در صورت شناسایی و یا عدم شناسایی یک استثنا اجرا می‌شود. (البته بلوک finally قرار است از زبان جاوا حذف شود.) در برنامه نویسی پایتونزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون (Python) چیست؟ این مقاله عالی به بررسی دلایل محبوبیت پایتون، موارد استفاده از پایتون و نحوه شروع به برنامه نویسی پایتون پرداخته بلوکی به نام catch وجود ندارد و در عوض از واژه except برای مدیریت استثنا استفاده می‌شود.

نمونه کدنویسی مدیریت استثنا در زبان های مختلف

در این قسمت می‌خواهیم یک نمونه ساده از مدیریت استثنا در 4 زبان برنامه نویسی C++ ،C# ،Java و پایتون را با هم بررسی کنیم. در سورس کد (Source Code)سورس کد چیست؟ آیا سورس کد یا سورس برنامه قابلیت اجرا دارند؟سورس کد چیست؟ آیا سورس کد یا سورس برنامه قابلیت اجرا دارند؟این مقاله عالی به سورس کد یا سورس برنامه پرداخته؛ همچنین به بررسی اهداف سورس کد، نحوه ساخت سورس کد و اینکه آیا سورس کد ها قابلیت اجرا دارند پرداخته زیر متغیر numerator از جنس عدد صحیح (Integer) و نماینده صورت کسر است که برابر مقدار 10 می‌باشد، همچنین متغیر denominator عدد مخرج است که یک متغیر دیگر از جنس عدد صحیح می‌باشد که مقدار آن 0 است. متغیر result یک متغیر دیگر از جنس Integer است و می‌خواهیم حاصل تقسیم numerator بر denominator را در آن ذخیره کنیم. همانطور که پیش‌تر گفته شد، تقسیم یک عدد بر 0 باعث ایجاد یک استثنا (Divided by Zero) می‌شود بنابراین این قسمت از کد باید داخل بلوک try نوشته شود تا در صورت ایجاد استثنا برنامه ما متوقف نشود.

کد مدیریت استثنا به زبان C++

#include <iostream>
 
int main() {
    try {
        int numerator = 10;
        int denominator = 0;
        int result = numerator / denominator;
        std::cout << "Result: " << result << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    } catch (...) {
        std::cerr << "Caught an unknown exception." << std::endl;
    }
 
    return 0;
}

کد مدیریت استثنا به زبان Java

public class TryCatchExample {
    public static void main(String[] args) {
        try {
            int numerator = 10;
            int denominator = 0;
            int result = numerator / denominator;
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.err.println("Caught exception: " + e.getMessage());
        } catch (Throwable t) {
            System.err.println("Caught an unknown exception.");
        }
    }
}

کد مدیریت استثنا به زبان C#

using System;
 
class TryCatchExample
{
    static void Main()
    {
        try
        {
            int numerator = 10;
            int denominator = 0;
            int result = numerator / denominator;
            Console.WriteLine("Result: " + result);
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine("Caught exception: " + ex.Message);
        }
        catch
        {
            Console.WriteLine("Caught an unknown exception.");
        }
    }
}

کد مدیریت استثنا به زبان Python

try:
    numerator = 10
    denominator = 0
    result = numerator / denominator
    print("Result:", result)
except ZeroDivisionError as e:
    print("Caught exception:", str(e))
except:
    print("Caught an unknown exception.")

اجرای یک نمونه مثال

بیایید یک نمونه اجرای کد را با و بدون مدیریت کردن استثنا بررسی کنیم. کد زیر را در نظر بگیرید:

print("Code started here")
 
try:
    numerator = 10
    denominator = 0
    result = numerator / denominator
    print("Result:", result)
except ZeroDivisionError as e:
    print("Caught exception:", str(e))
except:
    print("Caught an unknown exception.")
 
print("After exception");

همانطور که مشاهده می‌کنید از بلوک‌های try و catch استفاده شده است؛ همچنین قبل و بعد از این بلوک‌ها با استفاده از دستور print می‌خواهیم بررسی کنیم آیا کد به‌طور کامل اجرا می‌شود یا خیر.

نتیجه اجرای کدی که دارای استثنای Division by Zero بود که پس از اجرای آن پیغام Caught Exception نمایش داده می‌شود.

همانطور که در تصویر بالا مشخص است، استثنا مدیریت شده و پیام Caught exception نمایش داده شده است؛ همچنین بعد از تشخیص استثنا، پیام After exception نیز چاپ شده که نشان‌دهنده این است که کدهای بعد از استثنا نیز عملکرد صحیحی دارند. اکنون می‌خواهیم کد بالا را بدون بلوک‌های try و catch اجرا کنیم:

print("Code started here")
 
numerator = 10
denominator = 0
result = numerator / denominator
print("Result:", result)
 
print("After exception");

با اجرای دستور بالا نتیجه به‌صورت زیر می‌شود:

 نتیجه اجرای کدی که دارای استثنای ZeroDivisionError است و پس از اجرای آن برنامه متوقف شده است

همانطور که مشخص است یک ZeroDivisionError رخ داده است و برنامه متوقف شده است و دیگر خبری از پیام After exception نیست زیرا برنامه تا استثنا اجرا شده است و بعد از آن دیگر اجرا نشده است.

انواع استثناها کدامند؟

به‌طور کلی 2 نوع استثنا وجود دارد:

نمونه هایی از استثناهای معروف

تعداد استثناهایی که ممکن است در زمان اجرای برنامه ایجاد شوند نسبتا زیاد است؛ اما بعضی از این استثناها معروف هستند و در موارد زیادی ممکن است ایجاد شوند و شما به‌عنوان یک برنامه‌نویس می‌بایست نحوه مدیریت کردن آن را بلد باشید. در لیست زیر تعدادی از این استثناها آمده است:

جمع‌بندی

بحث استثناها همیشه در برنامه‌نویسی وجود داشته است و از دیرباز جزء یکی از دغدغه‌های برنامه‌نویسان بوده است. یادگیری در مورد انواع استثناها و مدیریت کردن آن یکی از ملزمات برنامه‌نویسی است؛ چرا که در صورت عدم کنترل صحیح آن، برنامه از اجرا می‌ایستد و عملکرد برنامه مختل می‌شود. در این مقاله به‌طور مفصل در مورد استثناها بحث کردیم و نمونه‌ای از آن را در زبان‌های برنامه‌نویسی مختلف نشان دادیم؛ همچنین توضیحاتی در مورد مهم‌ترین و معروف‌ترین استثناها نیز تهیه کردیم.

استثناها (Exceptions) چگونه مدیریت می‌شوند؟

ساده‌ترین راه برای مدیریت کردن استثناها استفاده از بلوک try-catch است. کدهایی که مستعد ایجاد استثنا هستند را درون بلوک try می‌نویسیم و مدیریت کردن استثنا در صورت ایجاد را در بلوک catch پیاده‌سازی می‌کنیم.

آیا استثنا همانند باگ‌های نرم‌افزاری هستند؟

خیر. مفهوم استثنا به‌طور کلی با باگ فرق دارد. باگ‌ها به دلایل کدنویسی ایجاد می‌شوند و در بدنه کد وجود دارند و با دیباگ کردن و رفع باگ از بین می‌روند. اما استثنا به ورودی کاربران و عملکرد برنامه بستگی دارد و وقوع آن قابل پیشگیری نیست بلکه باید مدیریت شود تا عملکرد برنامه مختل نشود.

امتیازدهی5 1 1 1 1 1 1 1 1 1 15.00 امتیاز (2 رای)
اشتراک
بارگذاری نظرات
تلگرام اینستاگرام