תרגיל - יישום טיפול בחריגים לקליטת ניסיון

הושלם

התבנית try-catch מורכבת מבלוק ואחריו try משפט אחד או catch יותר. כל catch פסוקית מציינת את המטפל עבור סוג חריגה אחר.

בעת התרעה על חריגה, זמן הריצה של השפה הנפוצה (CLR) מחפש פסוקית catch ה יכולה לטפל בחריגה. אם פעולת השירות הפועלת כעת catch אינה מכילה פסוקית ה יכולה לטפל בסוג החריגה שנזרקה, הפונקציה CLR מבצעת חיפוש בפעולת השירות שנקראת פעולת השירות הנוכחית. החיפוש ממשיך מטה דרך ערימת הקריאות עד למצאת catch משפט מתאים. אם לא catch נמצא משפט לטיפול בחריגה, ה- CLR מציג למשתמש הודעת חריגה שאינה מטופלת ומפסיקה את ביצוע התוכנית.

בתרגיל זה, תיישם תבנית בסיסית try-catch .

יצירת פרוייקט קוד חדש

השלב הראשון הוא ליצור פרוייקט קוד שבו אתה משתמש במהלך מודול זה.

  1. פתח מופע חדש של Visual Studio Code.

  2. בתפריט קובץ, בחר פתח תיקיה.

  3. בתיבת הדו-שיח פתיחת תיקיה, נווט אל תיקיית שולחן העבודה של Windows.

  4. בתיבת הדו-שיח פתיחת תיקיה, בחר תיקיה חדשה.

  5. תן שם לתיקיה החדשה Exceptions101 ולאחר מכן בחר בחר תיקיה.

  6. בתפריט נקודת, בחר מסוף חדש.

    תשתמש בפקודה .NET CLI כדי ליצור יישום קונסולה חדש.

  7. בשורת הפקודה של לוח המסוף, הזן את הפקודות הבאות:

    dotnet new console
    
  8. סגור את לוח המסוף.

הטמעת ניסיון פשוט

  1. השתמש בתצוגה Visual Studio Code EXPLORER כדי לפתוח את Program.cs הקובץ.

  2. בתפריט תצוגה, בחר לוח פקודה.

  3. בשורת הפקודה, הזן .net: g ולאחר מכן בחר .NET: צור נכסים עבור גירסת Build ו-איתור באגים.

  4. החלף את תוכן Program.cs הקובץ בקוד הבא:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    Console.WriteLine(float1 / float2);
    Console.WriteLine(number1 / number2);
    Console.WriteLine("Exit program");
    
  5. קח דקה כדי לבדוק את הקוד.

    שים לב שהיישום משתמש בשני סוגי משתנים מספריים, double וכן int. הקוד מבצע חישוב חילוק באמצעות שני הסוגים המספריים.

    מפתחים משתמשים במשתנה double סוג עבור חישובים כאשר ערכי שבר מדויקים חשובים.

  6. בתפריט הפעלה , בחר התחל איתור באגים.

    שים לב שמתרחשת DivideByZeroException חריגה בעת חלוקת ערכי המספר השלם.

    הערה

    ייתכן שהבחנו כי ניתן להשלים את המשוואה באמצעות double משתנים מסוג מבלי לגרום לשגיאה. חישוב חילוק באפס double באמצעות משתני סוג מחזיר תוצאה השווה לאינסוף, -infinity או "not a number". אין משמעות הדבר שעליך להשתמש תמיד במשתנה double סוג במקום בסוגים intdecimal . הגישה הנכונה היא להשתמש במשתנים מהסוג המתאים וליישם טיפול בחריגים כדי ללכוד שגיאות שעלולות להתרחש.

  7. בסרגל הכלים איתור באגים, בחר המשך.

    צילום מסך המציג את לחצן 'המשך' בסרגל הכלים 'איתור באגים'.

  8. קח דקה כדי לבדוק את פלט ההודעה עבור היישום שלך.

    ∞
    Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
       at Program.<Main>$(String[] args) in C:\Users\msuser\Desktop\Exceptions101\Program.cs:line 7
    

    שים לב כי החריגה שאינה מטופלת גרמה לכבה את היישום לאחר השלמת Console.WriteLine() המשפט הראשון.

    הערה

    כברירת מחדל, Visual Studio Code משתמש בטקסט צבע שונה כדי להציג הודעות שנוצרו על-ידי מאתר הבאגים. פעולה זו מסייעת למפתח להבחין בין פלט היישום לבין הודעות של מאתר הבאגים. אם אתה מעוניין בתצוגה נקיה יותר של פלט היישום שלך, באפשרותך להגדיר את launch.json להשתמש בקונסולה אחרת. לדוגמה, הגדר לשימוש console בלוח integratedTerminal המסוף עבור פלט יישום. הודעות איתור באגים מוצגות תמיד בלוח 'מסוף איתור באגים'.

  9. הקף את שני החישובים בתוך בלוק הקוד של משפט try באופן הבא:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
    Console.WriteLine("Exit program");
    
  10. שים לב לקו האדום המסולסל תחת הסוגר של הבלוק try .

    תחביר C# דורש catch משפט finally או משפט בעת שימוש במשפט try .

  11. בנה בלוק catch קוד מתחת לבלוק try הקוד באופן הבא:

    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    catch
    {
        Console.WriteLine("An exception has been caught");
    }
    
  12. בתפריט קוד Visual Studio קובץ, בחר שמור.

  13. בתפריט הפעלה , בחר התחל איתור באגים.

  14. קח דקה כדי לבדוק את הפלט שהיישום שלך יצר.

    ∞
    An exception has been caught
    Exit program
    
  15. שים לב שלמרות החריגה עדיין מתרחשת, היישום שלך יכול כעת לסיים את ביצוע שורות הקוד הנותרות לפני הסגירה.

    טיפול בחריגים מאפשר לך לשלוט בביצוע קוד כאשר מתרחשים חריגים. טיפול בחריגים עוזר להבטיח שהקוד שלך יציב ויפיק את התוצאות הצפויות.

המערכת התריעה על חריגות קליטתן בשיטות שנקראו

במקרים רבים, חריגה נתפסת ברמה של ערימת הקריאות שנמצאת מתחת לרמה שבה היא זרקה.

בעת התרעה על חריגה והשיטה הנוכחית אינה תופסת את החריגה, זמן הריצה של השפה הנפוצה ישתחרר מהערימה, catch ויחפש שיטה המכילה פסוקית ה יכולה לטפל בחריגה. הפסוקית catch הראשונה שנמצאה, ה יכולה לטפל בחריגה, תתבצע. אם לא נמצא catch פסוקית מתאימה במקום כלשהו במחסנית הקריאות, זמן הריצה של השפה הנפוצה ישים את התהליך ויציג הודעת שגיאה למשתמש.

  1. החלף את הקוד Program.cs הקובץ בקוד הבא:

    try
    {
        Process1();
    }
    catch
    {
        Console.WriteLine("An exception has occurred");
    }
    
    Console.WriteLine("Exit program");
    
    static void Process1()
    {
        WriteMessage();
    }
    
    static void WriteMessage()
    {
        double float1 = 3000.0;
        double float2 = 0.0;
        int number1 = 3000;
        int number2 = 0;
    
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
  2. החלף דקה כדי לסקור את הקוד המעודכן.

    • המשפטים ברמה העליונה כוללים את try בלוק הקוד הקריאות לפעולת Process1() השירות.
    • פעולת Process1() השירות קוראת לפעולת WriteMessage() השירות.
    • פעולת WriteMessage() השירות מכילה את הקוד שבו DivideByZeroException תתפנה החריגה.

    שים לב כי החריגה תפיק בשיטה הכוללת שתי רמות של ערימת קריאות מעל ובלוקי trycatch הקוד.

    צילום מסך המציג את רמות ערימת השיחות בין המקום שבו הוצגה חריגה לבין המקום שבו היא נתפסת.

    משפטים ברמה העליונה מיוצגים כשיטה בשם במחסנית Main הקריאות.

  3. בתפריט קוד Visual Studio קובץ, בחר שמור.

  4. בתפריט הפעלה , בחר התחל איתור באגים.

  5. קח דקה כדי לבדוק את הפלט שהיישום שלך יצר.

    ∞
    An exception has occurred
    Exit program
    
  6. שים לב של למרות שהכלל התריעה על שתי רמות במחסנית הקריאות, היא עדיין מטופלת בהצלחה.

תקציר

להלן כמה דברים חשובים שיש לזכור ביחידה זו:

  • יישם try-catch תבנית לשורות try קוד שצוינו ביישום catch שלך וחריגות המתרחשות בטווח של בלוק try הקוד.
  • השתמש בפסוקית catch כדי לתפוס חריגה שנזרקה באותה רמה של ערימת הקריאות.
  • השתמש בפסוקית catch כדי ללכוד חריגה שנזרקה ברמה גבוהה יותר של ערימת הקריאות.