Εκτύπωση Stacktrace στο αρχείο καταγραφής Pyhton

Ektypose Stacktrace Sto Archeio Katagraphes Pyhton



Μια συλλογή από κλήσεις προσέγγισης σε μια συγκεκριμένη στιγμή αναπαρίσταται σε ένα stacktrace. Όταν ένα πρόγραμμα εγείρει μια εξαίρεση, η Python δημιουργεί ένα stacktrace, γνωστό και ως traceback ή backtrace. Υπάρχει μια ποικιλία λεπτομερειών σε αυτό το stacktrace που μπορούν να αξιοποιηθούν για τον εντοπισμό του προβλήματος. Το πακέτο καταγραφής Python έρχεται με πολλά θεμελιώδη χαρακτηριστικά και έχει πολλαπλά επίπεδα καταγραφής, όπως 'debug', 'info', 'warning', 'error' και 'critical'.

Παράδειγμα 1: Εκτύπωση Stacktrace σε Python χρησιμοποιώντας τη μονάδα Traceback

Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε ένα απλό κομμάτι κώδικα για να δείξουμε πώς να εφαρμόσουμε τη λειτουργική μονάδα παρακολούθησης της Python για να εκτυπώσουμε το ίχνος στοίβας. Αυτό το πακέτο παρακολούθησης περιλαμβάνει μια δημοφιλή δυνατότητα συλλογής, αποθήκευσης και έκθεσης των ιχνών στοίβας από γλώσσες υπολογιστών. Αντιγράφει πιστά τις λειτουργίες εκτύπωσης stack trace ενός σεναρίου. Εάν χρειαστεί ποτέ να προβάλετε το ίχνος στοίβας, είναι απαραίτητο.

Με άλλα λόγια, ένα ίχνος στοίβας εμφανίζει κάθε λειτουργία που προηγήθηκε εκείνης που οδήγησε στο πρόβλημα. Οι πιο σημαντικές πληροφορίες αναφέρονται πάντα στην τελευταία γραμμή ενός ίχνους στοίβας, όταν εντοπίζεται το σφάλμα. Όλες οι κλήσεις συναρτήσεων στο σφάλμα που προκύπτει μπορούν να χρησιμοποιηθούν για τον γρήγορο εντοπισμό και επίλυση του προβλήματος.







Ας ξεκινήσουμε με την εφαρμογή του κώδικα μέσω της εισαγωγής της βιβλιοθήκης Traceback Python. Στη συνέχεια, στην επόμενη γραμμή, δημιουργούμε έναν πίνακα και παραθέτουμε τα στοιχεία με κάποιες τιμές. Οι τιμές της λίστας πίνακα είναι «7», «8», «9» και «10». Υπάρχουν τέσσερις τιμές στη λίστα πίνακα. Αυτή η λίστα πίνακα αποθηκεύτηκε στην προηγουμένως αρχικοποιημένη μεταβλητή 'A'.



Στη συνέχεια, χρησιμοποιούμε τον όρο «δοκιμάζω» και την τιμή «A=6» στην επόμενη γραμμή. Χρησιμοποιούμε τα μπλοκ try-except στην Python για να διαχειριστούμε τις εξαιρέσεις. Αυτή η προσέγγιση χρησιμοποιείται για τη σύνταξη του σεναρίου που θα μπορούσε να δημιουργήσει ένα σφάλμα στην κεφαλίδα του μπλοκ. Εξαιρέσεις είναι ουσιαστικά σφάλματα, παρόμοια με τα συντακτικά λάθη. Κατά τη διάρκεια μιας εξαίρεσης ενός προγράμματος, ο χειρισμός εξαιρέσεων είναι η μοναδική πράξη ανταπόκρισης στην εξαίρεση. Επιστρέφοντας στο σενάριο, χρησιμοποιούμε 'εκτός' στην επόμενη γραμμή.



Στο μπλοκ εκτός, χρησιμοποιούμε το 'traceback.print exc()' το οποίο είναι συντομογραφία για 'εξαίρεση εκτύπωσης'. Χρησιμοποιούμε τη συνάρτηση «print()» μέσα στο πλαίσιο εξαίρεσης που είναι «τέλος προγράμματος», έτσι ώστε αυτή η δήλωση να εκτυπώνεται όταν προκύψει η εξαίρεση. Τώρα, εάν παρουσιαστεί εξαίρεση στο πλαίσιο δοκιμής, το πρόγραμμα μετακινείται αμέσως στα μπλοκ εκτός και συνεχίζει. Εάν δεν προκύψει εξαίρεση, το μπλοκ εξαιρέσεων παραλείπεται εντελώς. Τώρα που συμβαίνει η εξαίρεση, μπορούμε να δούμε στον κώδικα ότι η τιμή '6' εισήχθη στο πλαίσιο δοκιμής, παρόλο που δεν βρίσκεται στη λίστα του πίνακα. Ως αποτέλεσμα, ο κώδικας πηγαίνει αμέσως στο πλαίσιο εξαίρεσης και εκτυπώνει τη δήλωση 'program ends' στην οθόνη εξόδου.





Οι διαφορετικές κλήσεις συναρτήσεων που συνθέτουν την ανίχνευση ταξινομούνται από την πιο πρόσφατη στη λιγότερο πρόσφατη, από κάτω προς τα πάνω. Όλες αυτές οι πράξεις αντιπροσωπεύονται από δηλώσεις δύο γραμμών. Κάθε κλήση ξεκινά με το όνομα αρχείου, τον αριθμό σειράς και το όνομα της μονάδας, τα οποία υποδεικνύουν τη θέση του κωδικού. Μετά από αυτό, εμφανίζει την πρόταση εκτύπωσης εξαίρεσης 'program end' καθώς η τιμή '6' δεν ήταν στη δηλωμένη λίστα, κάτι που έχει ως αποτέλεσμα την έξοδο 'ευρετήριο λίστας εκτός εύρους'.



Παράδειγμα 2: Εκτύπωση Stacktrace σε Python χρησιμοποιώντας τη μέθοδο Logging.Exception()

Σε αυτό το παράδειγμα, θα δείξουμε πώς να χρησιμοποιήσετε τη μέθοδο 'logging.exception()' της Python για την έξοδο ενός stacktrace. Το πακέτο καταγραφής στην Python μας επιτρέπει να καταγράψουμε τα σφάλματα καθώς και να καταγράψουμε τα σφάλματα και τις εξαιρέσεις. Οι λειτουργικές μονάδες καταγραφής μας δίνουν μια επιλογή λειτουργικών μονάδων καταγραφής, συμπεριλαμβανομένων των 'εντοπισμός σφαλμάτων', 'πληροφορίες', 'προειδοποίηση', 'σφάλμα' και 'κρίσιμο'. Αυτά είναι ουσιαστικά στρώματα ενοτήτων καταγραφής, για να το θέσω απλά. Για να καταγράψετε μια εξαίρεση με σφάλμα στην Python, χρησιμοποιήστε τη συνάρτηση 'logging.exception()'. Αυτή η συνάρτηση προσθέτει μια αναφορά με την κατάσταση ERROR σε αυτό το καταγραφικό. Πιστεύεται ότι οι παράμετροι προορίζονται για εντοπισμό σφαλμάτων. Οι πληροφορίες σχετικά με την εξαίρεση επισυνάπτονται στην αναφορά καταγραφής. Η μόνη τοποθεσία από την οποία θα κληθεί αυτή η διαδικασία θα πρέπει να είναι οι χειριστές εξαιρέσεων.

Τώρα, ας δούμε τον κώδικα. Πρώτον, εισάγουμε δύο βιβλιοθήκες – η πρώτη εκ των οποίων είναι η καταγραφή και η δεύτερη είναι η ανίχνευση. Στη συνέχεια, χρησιμοποιούμε τη μέθοδο 'basicConfig' με 'logging' και καθορίζουμε το επίπεδο ως 'logging.Debug'. Το μόνο όρισμα που παίρνει η μέθοδος 'getLogger()' είναι 'όνομα'. Έτσι, το χρησιμοποιούμε όταν χρησιμοποιούμε τη συνάρτηση 'logging.getlogger'. Εάν δοθεί ένα όνομα, δημιουργείται μια αναφορά σε μια παρουσία καταγραφικού με αυτό το όνομα. Διαφορετικά, η ρίζα επιστρέφεται. Το ίδιο αντικείμενο καταγραφικού αναφέρεται από πολλές λειτουργίες getLogger() με την ίδια ταυτότητα.

Στη συνέχεια, χρησιμοποιούμε το to try, και όπως γνωρίζουμε στο μπλοκ try, γράφουμε τον κώδικα που μπορεί να δημιουργήσει μια εξαίρεση. Σε αυτήν την περίπτωση, χρησιμοποιούμε το 'myfunction()'. Εάν η δεδομένη κατάσταση δεν ταιριάζει, προκύπτει μια εξαίρεση. Στη συνέχεια, ο κωδικός μεταβαίνει αμέσως στο μπλοκ εκτός. Σε αυτό το ιστολόγιο εξαίρεσης, χρησιμοποιούμε το 'logging.info'. Μέσα σε αυτό, γράφουμε το μήνυμα που θέλουμε να εκτυπώσουμε το οποίο είναι «Έγινε εξαίρεση». Αυτό οφείλεται στο γεγονός ότι εάν συμβεί μια εξαίρεση, εμφανίζεται απλώς ένα σφάλμα, τότε εμφανίζεται αυτό το μήνυμα στην οθόνη. Αλλά εάν το σφάλμα δεν παρουσιαστεί, αγνοεί ολόκληρο το μήνυμα εξαίρεσης.

Ορίσαμε επίσης το 'exc info=True' με το μήνυμα. Ολόκληρο το stacktrace θα συμπεριληφθεί στην καταγραφή όταν οι πληροφορίες exc οριστούν σε True, όπως συμβαίνει με το 'logger.exception()'. Η μόνη διαφορά είναι ότι μπορείτε να αλλάξετε γρήγορα το επίπεδο καταγραφής από σφάλμα σε κάτι άλλο, απλώς ανταλλάσσοντας το καταγραφικό.

Τώρα που προέκυψε μια εξαίρεση στο σενάριο, η πρώτη γραμμή εξόδου είναι το μήνυμα 'Η εξαίρεση πραγματοποιήθηκε' ακολουθούμενο από το επίπεδο καταγραφής που χρησιμοποιήθηκε στο σενάριο που είναι 'πληροφορίες'. Το όνομα του καταγραφέα εμφανίζεται ως ρίζα σε αυτήν την περίπτωση. Στη συνέχεια, εμφανίζεται η κλήση παρακολούθησης, εμφανίζοντας τα ονόματα της μονάδας, της γραμμής και των αρχείων. Τέλος, το μήνυμα σφάλματος 'myfunction' δεν έχει οριστεί.

Ας μιλήσουμε για λίγο ακόμα κώδικα που χρησιμοποιεί την καταγραφή. Η μέθοδος exclusive() ξεκινάει με την εισαγωγή της βιβλιοθήκης για καταγραφή. Στη συνέχεια, αρχικοποιούνται δύο μεταβλητές - 'm' και 'n' και δίνονται οι τιμές '7' και '0', αντίστοιχα. Το μπλοκ δοκιμής χρησιμοποιείται τώρα στο επόμενο βήμα. Μέσα σε αυτό, γράφουμε τον κώδικα που θα μπορούσε να προκαλέσει εξαίρεση. Αρχικά, δηλώνουμε τη μεταβλητή 'o'. Έπειτα, ορίζουμε ότι το 'm' διαιρείται με το 'n'. Αυτό προκαλεί εξαίρεση επειδή ο παρονομαστής είναι μηδέν και δεν μπορούμε να διαιρέσουμε κανέναν αριθμό με το μηδέν, πράγμα που σημαίνει ότι θα προκύψουν σφάλματα. Ως αποτέλεσμα, ο κώδικας μεταβαίνει στο μπλοκ εκτός όπου χρησιμοποιείται το 'logging.error'. Το σφάλμα είναι το επίπεδο καταγραφής. Εάν προκύψει εξαίρεση, εκτυπώνουμε ένα μήνυμα ή μια δήλωση που λέει, 'Παρουσιάστηκε εξαίρεση' και ορίζουμε 'exc info=true'. Εάν δεν το θέσουμε σε true, εκτυπώνει μόνο το μπλοκ εξαιρέσεων και δεν εμφανίζει τις πληροφορίες ανίχνευσης.

Επειδή επιλέξαμε το επίπεδο 'ΣΦΑΛΜΑ' στο σενάριό μας, εμφανίζει πρώτα τη ρίζα ως όνομα του καταγραφέα, ακολουθούμενη από το μήνυμα 'Συνέβη εξαίρεση'. Στη συνέχεια εμφανίζονται οι πληροφορίες παρακολούθησης που περιλάμβαναν το όνομα αρχείου, τον αριθμό γραμμής και τη μονάδα. Στη συνέχεια, η επόμενη γραμμή εμφανίζει μια ειδοποίηση σφάλματος, καθώς ο παρονομαστής δεν μπορεί να είναι μηδέν. Και επειδή ο παρονομαστής είναι μηδέν σε αυτόν τον κωδικό, το σφάλμα αναφέρεται ως σφάλμα μηδενικού διαιρέτη.

συμπέρασμα

Σε αυτό το άρθρο, εξετάσαμε τη διαδικασία εκτύπωσης ενός stacktrace σε ένα αρχείο καταγραφής Python καθώς και τον τρόπο χρήσης της λειτουργικής μονάδας traceback για τη δημιουργία ενός stack trace. Στο πρώτο παράδειγμα, έγινε εισαγωγή της βιβλιοθήκης ανίχνευσης και χρησιμοποιήθηκαν οι μέθοδοι try and εκτός. Ο κωδικός γράφτηκε στο πλαίσιο δοκιμής. Εάν προκύψει μια εξαίρεση, μεταπηδά γρήγορα στο μπλοκ εξαιρέσεων και εμφανίζει τη δήλωση εξαίρεσης στην οθόνη. Στο δεύτερο παράδειγμα, χρησιμοποιήσαμε την καταγραφή που μοιάζει με το πρώτο παράδειγμα. Η μέθοδος εξαίρεσης () χρησιμοποιεί τα επίπεδα 'πληροφοριών' και 'σφάλματος' της καταγραφής. Εάν παρουσιαστεί μια εξαίρεση, εμφανίζει μια δήλωση εξαίρεσης.