Πώς να ορίσετε προσαρμοσμένες εξαιρέσεις στο Python; (Με παραδείγματα)

Σε αυτό το σεμινάριο, θα μάθετε πώς να ορίζετε προσαρμοσμένες εξαιρέσεις ανάλογα με τις απαιτήσεις σας με τη βοήθεια παραδειγμάτων.

Η Python έχει πολλές ενσωματωμένες εξαιρέσεις που αναγκάζουν το πρόγραμμά σας να εμφανίζει σφάλμα όταν κάτι στο πρόγραμμα πάει στραβά.

Ωστόσο, μερικές φορές ίσως χρειαστεί να δημιουργήσετε τις δικές σας προσαρμοσμένες εξαιρέσεις που εξυπηρετούν το σκοπό σας.

Δημιουργία προσαρμοσμένων εξαιρέσεων

Στο Python, οι χρήστες μπορούν να ορίσουν προσαρμοσμένες εξαιρέσεις δημιουργώντας μια νέα τάξη. Αυτή η κατηγορία εξαίρεσης πρέπει να προέρχεται, άμεσα ή έμμεσα, από την ενσωματωμένη Exceptionτάξη. Οι περισσότερες από τις ενσωματωμένες εξαιρέσεις προέρχονται επίσης από αυτήν την κατηγορία.

 >>> class CustomError(Exception):… pass… >>> raise CustomError Traceback (most recent call last):… __main__.CustomError >>> raise CustomError("An error occurred") Traceback (most recent call last):… __main__.CustomError: An error occurred

Εδώ, έχουμε δημιουργήσει μια εξαίρεση καθορισμένη CustomErrorαπό τον χρήστη που ονομάζεται που κληρονομεί από την Exceptionτάξη. Αυτή η νέα εξαίρεση, όπως και άλλες εξαιρέσεις, μπορεί να δημιουργηθεί χρησιμοποιώντας τη raiseδήλωση με ένα προαιρετικό μήνυμα σφάλματος.

Όταν αναπτύσσουμε ένα μεγάλο πρόγραμμα Python, είναι καλή πρακτική να τοποθετείτε όλες τις εξαιρέσεις που καθορίζονται από το χρήστη και τις οποίες δημιουργεί το πρόγραμμά μας σε ξεχωριστό αρχείο. Πολλές τυπικές ενότητες το κάνουν αυτό. Ορίζουν τις εξαιρέσεις τους ξεχωριστά ως exceptions.pyή errors.py(γενικά αλλά όχι πάντα).

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

Παράδειγμα: Εξαίρεση καθορισμένη από τον χρήστη στην Python

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

Αυτό το πρόγραμμα θα ζητήσει από τον χρήστη να εισαγάγει έναν αριθμό μέχρι να μαντέψει σωστά έναν αποθηκευμένο αριθμό. Για να τους βοηθήσουν να το καταλάβουν, παρέχεται μια υπόδειξη εάν η εικασία τους είναι μεγαλύτερη ή μικρότερη από τον αποθηκευμένο αριθμό.

 # define Python user-defined exceptions class Error(Exception): """Base class for other exceptions""" pass class ValueTooSmallError(Error): """Raised when the input value is too small""" pass class ValueTooLargeError(Error): """Raised when the input value is too large""" pass # you need to guess this number number = 10 # user guesses a number until he/she gets it right while True: try: i_num = int(input("Enter a number: ")) if i_num number: raise ValueTooLargeError break except ValueTooSmallError: print("This value is too small, try again!") print() except ValueTooLargeError: print("This value is too large, try again!") print() print("Congratulations! You guessed it correctly.")

Ακολουθεί ένα δείγμα εκτέλεσης αυτού του προγράμματος.

Εισαγάγετε έναν αριθμό: 12 Αυτή η τιμή είναι πολύ μεγάλη, δοκιμάστε ξανά! Εισαγάγετε έναν αριθμό: 0 Αυτή η τιμή είναι πολύ μικρή, δοκιμάστε ξανά! Πληκτρολογήστε έναν αριθμό: 8 Αυτή η τιμή είναι πολύ μικρή, δοκιμάστε ξανά! Εισαγάγετε έναν αριθμό: 10 Συγχαρητήρια! Το μαντέψατε σωστά.

Έχουμε ορίσει μια βασική τάξη που ονομάζεται Error.

Οι άλλες δύο εξαιρέσεις ( ValueTooSmallErrorκαι ValueTooLargeError) που προκύπτουν από το πρόγραμμά μας προέρχονται από αυτήν την τάξη. Αυτός είναι ο τυπικός τρόπος καθορισμού εξαιρέσεων που καθορίζονται από τον χρήστη στον προγραμματισμό Python, αλλά δεν περιορίζεστε μόνο σε αυτόν τον τρόπο.

Προσαρμογή τάξεων εξαίρεσης

Μπορούμε περαιτέρω να προσαρμόσουμε αυτήν την τάξη για να δεχτούμε άλλα επιχειρήματα σύμφωνα με τις ανάγκες μας.

Για να μάθετε σχετικά με την προσαρμογή των τάξεων εξαίρεσης, πρέπει να έχετε τις βασικές γνώσεις για τον προγραμματισμό αντικειμένων.

Επισκεφτείτε το Python Object Oriented Programming για να ξεκινήσετε να μαθαίνετε για αντικειμενοστρεφή προγραμματισμό στο Python

Ας δούμε ένα παράδειγμα:

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Παραγωγή

 Εισαγάγετε ποσό μισθού: 2000 Traceback (τελευταία πρόσφατη κλήση): Αρχείο ", γραμμή 17, αύξηση SalaryNotInRangeError (μισθός) __ κύρια __. SalaryNotInRangeError: Ο μισθός δεν βρίσκεται στο εύρος (5000, 15000)

Εδώ, έχουμε παρακάμψει τον κατασκευαστή της Exceptionτάξης για να αποδεχτούμε τα δικά μας προσαρμοσμένα επιχειρήματα salaryκαι message. Στη συνέχεια, ο κατασκευαστής της μητρικής Exceptionτάξης καλείται χειροκίνητα με το self.messageόρισμα χρησιμοποιώντας super().

Το προσαρμοσμένο self.salaryχαρακτηριστικό ορίζεται για χρήση αργότερα.

Η κληρονομική __str__μέθοδος της Exceptionτάξης χρησιμοποιείται στη συνέχεια για την εμφάνιση του αντίστοιχου μηνύματος όταν SalaryNotInRangeErrorεμφανίζεται.

Μπορούμε επίσης να προσαρμόσουμε την __str__ίδια τη μέθοδο παρακάμπτοντάς την.

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'(self.salary) -> (self.message)' salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Παραγωγή

 Εισαγάγετε ποσό μισθού: 2000 Traceback (τελευταία πρόσφατη κλήση): Αρχείο "/home/bsoyuj/Desktop/Untitled-1.py", γραμμή 20, αύξηση SalaryNotInRangeError (μισθός) __ κύρια __. SalaryNotInRangeError: 2000 -> Ο μισθός δεν βρίσκεται στο ( 5000, 15000) εύρος

Για να μάθετε περισσότερα σχετικά με το πώς μπορείτε να χειριστείτε εξαιρέσεις στο Python, επισκεφθείτε το Python Exception Handling.

ενδιαφέροντα άρθρα...