תרגיל - יישום טיפול בחריגים לקליטת ניסיון
התבנית try-catch מורכבת מבלוק ואחריו try משפט אחד או catch יותר. כל catch פסוקית מציינת את המטפל עבור סוג חריגה אחר.
בעת התרעה על חריגה, זמן הריצה של השפה הנפוצה (CLR) מחפש פסוקית catch ה יכולה לטפל בחריגה. אם פעולת השירות הפועלת כעת catch אינה מכילה פסוקית ה יכולה לטפל בסוג החריגה שנזרקה, הפונקציה CLR מבצעת חיפוש בפעולת השירות שנקראת פעולת השירות הנוכחית. החיפוש ממשיך מטה דרך ערימת הקריאות עד למצאת catch משפט מתאים. אם לא catch נמצא משפט לטיפול בחריגה, ה- CLR מציג למשתמש הודעת חריגה שאינה מטופלת ומפסיקה את ביצוע התוכנית.
בתרגיל זה, תיישם תבנית בסיסית try-catch .
יצירת פרוייקט קוד חדש
השלב הראשון הוא ליצור פרוייקט קוד שבו אתה משתמש במהלך מודול זה.
פתח מופע חדש של Visual Studio Code.
בתפריט קובץ, בחר פתח תיקיה.
בתיבת הדו-שיח פתיחת תיקיה, נווט אל תיקיית שולחן העבודה של Windows.
בתיבת הדו-שיח פתיחת תיקיה, בחר תיקיה חדשה.
תן שם לתיקיה החדשה Exceptions101 ולאחר מכן בחר בחר תיקיה.
בתפריט נקודת, בחר מסוף חדש.
תשתמש בפקודה .NET CLI כדי ליצור יישום קונסולה חדש.
בשורת הפקודה של לוח המסוף, הזן את הפקודות הבאות:
dotnet new consoleסגור את לוח המסוף.
הטמעת ניסיון פשוט
השתמש בתצוגה Visual Studio Code EXPLORER כדי לפתוח את Program.cs הקובץ.
בתפריט תצוגה, בחר לוח פקודה.
בשורת הפקודה, הזן .net: g ולאחר מכן בחר .NET: צור נכסים עבור גירסת Build ו-איתור באגים.
החלף את תוכן 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");קח דקה כדי לבדוק את הקוד.
שים לב שהיישום משתמש בשני סוגי משתנים מספריים,
doubleוכןint. הקוד מבצע חישוב חילוק באמצעות שני הסוגים המספריים.מפתחים משתמשים במשתנה
doubleסוג עבור חישובים כאשר ערכי שבר מדויקים חשובים.בתפריט הפעלה , בחר התחל איתור באגים.
שים לב שמתרחשת
DivideByZeroExceptionחריגה בעת חלוקת ערכי המספר השלם.הערה
ייתכן שהבחנו כי ניתן להשלים את המשוואה באמצעות
doubleמשתנים מסוג מבלי לגרום לשגיאה. חישוב חילוק באפסdoubleבאמצעות משתני סוג מחזיר תוצאה השווה לאינסוף, -infinity או "not a number". אין משמעות הדבר שעליך להשתמש תמיד במשתנהdoubleסוג במקום בסוגיםintdecimal. הגישה הנכונה היא להשתמש במשתנים מהסוג המתאים וליישם טיפול בחריגים כדי ללכוד שגיאות שעלולות להתרחש.בסרגל הכלים איתור באגים, בחר המשך.
קח דקה כדי לבדוק את פלט ההודעה עבור היישום שלך.
∞ 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המסוף עבור פלט יישום. הודעות איתור באגים מוצגות תמיד בלוח 'מסוף איתור באגים'.הקף את שני החישובים בתוך בלוק הקוד של משפט
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");שים לב לקו האדום המסולסל תחת הסוגר של הבלוק
try.תחביר C# דורש
catchמשפטfinallyאו משפט בעת שימוש במשפטtry.בנה בלוק
catchקוד מתחת לבלוקtryהקוד באופן הבא:try { Console.WriteLine(float1 / float2); Console.WriteLine(number1 / number2); } catch { Console.WriteLine("An exception has been caught"); }בתפריט קוד Visual Studio קובץ, בחר שמור.
בתפריט הפעלה , בחר התחל איתור באגים.
קח דקה כדי לבדוק את הפלט שהיישום שלך יצר.
∞ An exception has been caught Exit programשים לב שלמרות החריגה עדיין מתרחשת, היישום שלך יכול כעת לסיים את ביצוע שורות הקוד הנותרות לפני הסגירה.
טיפול בחריגים מאפשר לך לשלוט בביצוע קוד כאשר מתרחשים חריגים. טיפול בחריגים עוזר להבטיח שהקוד שלך יציב ויפיק את התוצאות הצפויות.
המערכת התריעה על חריגות קליטתן בשיטות שנקראו
במקרים רבים, חריגה נתפסת ברמה של ערימת הקריאות שנמצאת מתחת לרמה שבה היא זרקה.
בעת התרעה על חריגה והשיטה הנוכחית אינה תופסת את החריגה, זמן הריצה של השפה הנפוצה ישתחרר מהערימה, catch ויחפש שיטה המכילה פסוקית ה יכולה לטפל בחריגה. הפסוקית catch הראשונה שנמצאה, ה יכולה לטפל בחריגה, תתבצע. אם לא נמצא catch פסוקית מתאימה במקום כלשהו במחסנית הקריאות, זמן הריצה של השפה הנפוצה ישים את התהליך ויציג הודעת שגיאה למשתמש.
החלף את הקוד 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); }החלף דקה כדי לסקור את הקוד המעודכן.
- המשפטים ברמה העליונה כוללים את
tryבלוק הקוד הקריאות לפעולתProcess1()השירות. - פעולת
Process1()השירות קוראת לפעולתWriteMessage()השירות. - פעולת
WriteMessage()השירות מכילה את הקוד שבוDivideByZeroExceptionתתפנה החריגה.
שים לב כי החריגה תפיק בשיטה הכוללת שתי רמות של ערימת קריאות מעל ובלוקי
trycatchהקוד.
משפטים ברמה העליונה מיוצגים כשיטה בשם במחסנית
Mainהקריאות.- המשפטים ברמה העליונה כוללים את
בתפריט קוד Visual Studio קובץ, בחר שמור.
בתפריט הפעלה , בחר התחל איתור באגים.
קח דקה כדי לבדוק את הפלט שהיישום שלך יצר.
∞ An exception has occurred Exit programשים לב של למרות שהכלל התריעה על שתי רמות במחסנית הקריאות, היא עדיין מטופלת בהצלחה.
תקציר
להלן כמה דברים חשובים שיש לזכור ביחידה זו:
- יישם
try-catchתבנית לשורותtryקוד שצוינו ביישוםcatchשלך וחריגות המתרחשות בטווח של בלוקtryהקוד. - השתמש בפסוקית
catchכדי לתפוס חריגה שנזרקה באותה רמה של ערימת הקריאות. - השתמש בפסוקית
catchכדי ללכוד חריגה שנזרקה ברמה גבוהה יותר של ערימת הקריאות.