Ανάγνωση Python tracebacks — DedSec Project
Ανάγνωση Python tracebacks Τι συμβαίνει Το traceback είναι αλυσίδα κλήσεων συναρτήσεων. Διάβασε πρώτα την τελευταία γραμμή εξαίρεσης και μετά την πρώτη κλήση που ανήκει στον δικό σου…
Τι συμβαίνει
Το traceback είναι αλυσίδα κλήσεων συναρτήσεων. Διάβασε πρώτα την τελευταία γραμμή εξαίρεσης και μετά την πρώτη κλήση που ανήκει στον δικό σου κώδικα.
Πρακτικός έλεγχος
Κατάγραψε τύπο εξαίρεσης, λανθασμένη τιμή και γραμμή. Δημιούργησε το μικρότερο παράδειγμα που αναπαράγει το σφάλμα πριν διορθώσεις.
Συνήθεις παγίδες
Για KeyError εξέτασε τα διαθέσιμα κλειδιά και την προέλευση του κλειδιού που λείπει. Μη σβήνεις όλες τις εξαιρέσεις με γενικό except.
Μικρό παράδειγμα για προσαρμογή
python -X dev script.py
Κριτήριο ολοκλήρωσης
Επανέλεγξε τη συμπεριφορά σε δικό σου περιβάλλον, με δοκιμαστικά δεδομένα και χωρίς να χαθεί υπάρχουσα εργασία.
Ακολούθησε την τιμή ανάμεσα σε συναρτήσεις
def load_price(record):
return int(record['price'])
try:
load_price({'price': 'unknown'})
except ValueError as exc:
assert type(exc).__name__ == 'ValueError'
else:
raise AssertionError('invalid numeric text accepted')
Πρόβλεψε αν αποτυγχάνει το dictionary lookup ή η μετατροπή αριθμού. Άλλαξε μόνο το fixture σε {}: προκύπτει KeyError, επειδή δεν φτάνει ποτέ στο int. Handler για ValueError δεν διορθώνει ελλείπον πεδίο. Αποφάσισε αν πρόκειται για παραβίαση caller contract ή αναμενόμενη απόρριψη εγγραφής. Για διάγνωση ενός πεδίου δεν χρειάζεται να τυπώσεις ολόκληρο πραγματικό customer record.
Σε chained exception εξέτασε και το τελικό μήνυμα και το explicit cause. Το raise ... from exc μπορεί να διατηρήσει την αιτία, ενώ μία άσχετη τιμή επιτυχίας δυσκολεύει την επόμενη διάγνωση. Το test πρέπει να ελέγχει αποτέλεσμα ή exception type, όχι αριθμούς γραμμών που αλλάζουν σε κάθε edit.