הדפס Stacktrace ב-Pyhton Log

Hdps Stacktrace B Pyhton Log



אוסף של קריאות גישה ברגע מסוים מיוצג ב-stacktrace. כאשר תוכנית מעלה חריגה, Python מייצרת מעקב מחסני, הידוע גם כ-traceback או backtrace. יש מגוון של פרטים ב-stacktrace זה שניתן לנצל כדי לאתר את הבעיה. חבילת הרישום של Python מגיעה עם מספר תכונות בסיסיות ויש לה מספר רמות של רישום כולל 'ניפוי באגים', 'מידע', 'אזהרה', 'שגיאה' ו'קריטי'.

דוגמה 1: הדפס Stacktrace ב-Python על ידי שימוש במודול Traceback

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

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







נתחיל ביישום הקוד באמצעות ייבוא ​​ספריית ה- traceback Python. לאחר מכן, בשורה הבאה, אנו יוצרים מערך ומפרטים את האלמנטים עם כמה ערכים. הערכים של רשימת המערך הם '7', '8', '9' ו-'10'. ישנם ארבעה ערכים ברשימת המערך. רשימת מערך זו נשמרה במשתנה שאותחל בעבר 'A'.



לאחר מכן, אנו משתמשים במונח 'נסה' ובערך 'A=6' בשורה הבאה. אנו משתמשים בלוקים של try-except ב- Python כדי לנהל את החריגים. גישה זו משמשת לכתיבת הסקריפט שעלול להעלות שגיאה בכותרת הבלוק. חריגים הם בעצם שגיאות, בדומה לשגיאות תחביר. במהלך חריג של תוכנית, טיפול בחריג הוא הפעולה הייחודית של תגובה לחריגה. אם נחזור לתסריט, אנו משתמשים ב-'except' בשורה הבאה.



בבלוק except, אנו משתמשים ב-'traceback.print exc()' שהוא קיצור של 'printing exception'. אנו משתמשים בפונקציה 'print()' בתוך תיבת החריג שהיא 'סוף תוכנית' כך שהמשפט הזה מודפס כאשר החריג מתעורר. כעת, אם מתרחש חריג בתיבת הנסיון, התוכנית עוברת מיד לבלוקים מלבד וממשיכה. אם חריגה לא מתרחשת, בלוק החריג ידלג לחלוטין. כעת, לאחר שהחריג קורה, אנו יכולים לראות בקוד שהערך '6' הוזן בתיבת הניסיון למרות שהוא לא ברשימת המערך. כתוצאה מכך, הקוד עובר מיד לתיבת החריגים ומדפיס את ההצהרה 'סופות תוכנית' בתצוגת הפלט.





קריאות הפונקציות השונות המרכיבות את העקיבה מסודרות מהאחרון לפחות אחרון, מלמטה למעלה. פעולות אלו מיוצגות כולן על ידי הצהרות דו-שורות. כל שיחה מתחילה בשם הקובץ, מספר הרצף ושם המודול, כולם מציינים את מיקום הקוד. לאחר מכן, הוא מציג את הצהרת ההדפסה החריגה 'סיום תוכנית' מכיוון שהערך '6' לא היה ברשימה המוצהרת, מה שמוביל לפלט 'אינדקס הרשימה מחוץ לטווח'.



דוגמה 2: הדפס Stacktrace ב- Python על ידי שימוש בשיטת Logging.Exception()

בדוגמה זו, נדגים כיצד להשתמש בשיטת 'logging.exception()' של Python כדי להפיק מעקב מחסני. חבילת הרישום ב- Python מאפשרת לנו לרשום את השגיאות וכן לתעד את השגיאות והחריגים. מודולי רישום נותנים לנו מבחר של מודולי רישום, כולל 'ניפוי באגים', 'מידע', 'אזהרה', 'שגיאה' ו'קריטי'. אלה בעצם שכבות של מודולי רישום, בפשטות. כדי לרשום חריג עם שגיאה ב- Python, השתמש בפונקציה 'logging.exception()'. פונקציה זו מוסיפה דוח עם סטטוס ERROR ללוגר זה. הוא האמין כי הפרמטרים הם עבור ניפוי באגים. המידע על החריגה מצורף לדוח הרישום. המיקום היחיד שממנו ניתן להפעיל נוהל זה צריך להיות המטפלים בחריגים.

עכשיו, בואו נסתכל על הקוד. ראשית, אנו מייבאים שתי ספריות - הראשונה שבהן היא רישום והשנייה שבהן היא עקבות. לאחר מכן, אנו משתמשים בשיטת 'basicConfig' עם 'logging' ומציינים את הרמה כ-'logging.Debug'. הטיעון היחיד ששיטת 'getLogger()' נוקטת הוא 'שם'. לפיכך, אנו משתמשים בו בעת שימוש בפונקציית 'logging.getlogger'. אם ניתן שם, נוצרת הפניה למופע לוגר בשם זה; אחרת, השורש מוחזר. לאותו אובייקט לוגר מתייחסים פעולות getLogger() רבות עם אותה זהות.

לאחר מכן, אנו נוהגים לנסות, וכפי שאנו יודעים בבלוק ה-try, אנו כותבים את הקוד שעשוי להעלות חריג. במקרה זה, אנו משתמשים ב-'myfunction()'. אם המצב הנתון אינו תואם, מתרחש חריג. לאחר מכן, הקוד קופץ מיד לבלוק חוץ. בבלוג חריג זה, אנו משתמשים ב-'logging.info'. בתוכו, אנו כותבים את ההודעה שאנו רוצים להדפיס שהיא 'התקיים חריג'. הסיבה לכך היא שאם מתרחש חריג, פשוט מתרחשת שגיאה ואז היא מציגה את ההודעה הזו על המסך. אבל אם השגיאה לא מתרחשת, היא מתעלמת מהודעת החריגה כולה.

אנחנו גם מגדירים את 'exc info=true' עם ההודעה. כל ה-stacktrace ייכלל ברישום כאשר ה-ex info מוגדר כ-True, בדומה למה שקורה עם 'logger.exception()'. ההבחנה היחידה היא שאתה יכול להעביר במהירות את רמת היומן משגיאה למשהו אחר על ידי החלפת היומן בלבד.

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

בואו נדבר על עוד קוד שעושה שימוש ברישום. שיטת ה-exception() מתחילה בייבוא ​​הספרייה לרישום. לאחר מכן, שני משתנים - 'm' ו- 'n' - מאותחלים ומקבלים את הערכים '7' ו- '0', בהתאמה. כעת נעשה שימוש בבלוק הניסיון בשלב הבא. בתוכו, אנו כותבים את הקוד שעלול לגרום לחריגה. ראשית, אנו מכריזים על המשתנה 'o'. לאחר מכן, אנו קובעים את ה- 'm' חלקי 'n'. זה גורם לחריגה מכיוון שהמכנה הוא אפס ולא נוכל לחלק שום מספר באפס, מה שאומר שהטעויות יתעוררו. כתוצאה מכך, הקוד קופץ לגוש החוץ שבו נעשה שימוש ב-'logging.error'. שגיאה היא רמת הרישום. אם מתרחש חריג, אנו מדפיסים הודעה או הצהרה שאומרים 'חריגה התרחשה' ואנחנו מגדירים 'exc info=true'. אם אנחנו לא מגדירים אותו כ-true, זה רק מדפיס את בלוק החריגים ולא מציג את מידע העקיבה.

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

סיכום

במאמר זה, בדקנו את התהליך של הדפסת מחסנית ביומן של Python וכן כיצד להשתמש במודול העקיבה כדי ליצור עקבות מחסנית. בדוגמה הראשונה, ספריית המעקב יובאה והשתמשו בשיטות try and except. הקוד נכתב בתיבת הניסיון. אם מתרחש חריג, הוא קופץ במהירות לבלוק החריג ומציג את הצהרת החריגה על המסך. בדוגמה השנייה, השתמשנו ברישום שדומה לדוגמה הראשונה. שיטת ה-exception() משתמשת ברמות 'מידע' ו-'שגיאה' של רישום. אם מתרחש חריג, הוא מציג משפט חריג.