Πώς να εντοπίσετε πολλές εξαιρέσεις στην Python: Ένας εύκολος οδηγός

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

Τι είναι οι Εξαιρέσεις στην Python;

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

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

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

Για αυτό το άρθρο, θα υποθέσω ότι είστε ήδη εξοικειωμένοι με τα βασικά στοιχεία της αύξησης και του χειρισμού εξαιρέσεων, τα οποία καλύπτονται σε αυτήν την Εισαγωγή στο άρθρο Python Try/Except.

Η σημασία του χειρισμού πολλαπλών εξαιρέσεων στην Python

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

Χειρισμός πολλαπλών εξαιρέσεων

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

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

#1. Εντοπισμός διαφορετικών εξαιρέσεων σε διαφορετικά μπλοκ

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

Το ValueError θα αυξηθεί όταν ο χρήστης εισάγει μια τιμή που δεν μπορεί να μετατραπεί σε ακέραιο. Το ZeroDivisionError θα αυξηθεί όταν ο δεύτερος αριθμός είναι μηδέν. Και στις δύο αυτές περιπτώσεις, θέλουμε να εμφανίσουμε ένα μήνυμα σφάλματος που λέει, “Έχετε εισαγάγει μια μη έγκυρη τιμή”.

Για να κάνουμε τα παραπάνω, μπορούμε να γράψουμε τον ακόλουθο κώδικα:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except ValueError as e:
    print("You entered an invalid value")
except ZeroDivisionError as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

Εάν εκτελέσουμε τον παραπάνω κώδικα και κείμενο που δεν μπορούν να μετατραπούν σε ακέραιο, θα είναι το αποτέλεσμα:

  Τι είναι η γρήγορη φόρτιση και πώς λειτουργεί;

Και αν εισάγαμε τον δεύτερο αριθμό ως 0, αυτό θα ήταν το αποτέλεσμα:

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

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

#2. Εντοπισμός πολλαπλών εξαιρέσεων σε ένα μπλοκ εκτός

Για να συλλάβουμε πολλές εξαιρέσεις, παρέχουμε μια πλειάδα που καθορίζει όλα τα σφάλματα που θέλουμε να συλλάβουμε. Ακολουθεί ένα παράδειγμα όπου πιάνουμε τόσο το ValueError όσο και το ZeroDivisionError σε ένα μπλοκ εκτός:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

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

#3. Προσδιορισμός της εξαίρεσης που έχει συλληφθεί

Ο παραπάνω κώδικας εκτελεί τον πρώτο αποκλεισμό εκτός όταν έχει εντοπιστεί είτε ένα ValueError είτε ένα ZeroDivisionError. Σε ορισμένες περιπτώσεις, μπορεί να έχετε κώδικα που θέλετε να εκτελέσετε και για τα δύο σφάλματα και κάποιον άλλο κώδικα που θέλετε να εκτελέσετε για το ένα αλλά όχι για το άλλο σφάλμα.

  8 Προσλάβετε πλατφόρμες μάρκετινγκ για να προσλάβετε τον καλύτερο εμπειρογνώμονα μάρκετινγκ ηλεκτρονικού ταχυδρομείου

Σε αυτήν την περίπτωση, πρέπει πρώτα να προσδιορίσετε ποιο σφάλμα έχει εντοπιστεί και να εκτελέσετε τον κατάλληλο κώδικα.

Για να προσδιορίσετε ποια εξαίρεση έχει συλληφθεί, μπορείτε να χρησιμοποιήσετε ένα μπλοκ if/else μέσα στο μπλοκ εκτός. Για παράδειγμα:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")

    if isinstance(e, ValueError):
        print('Value Error')
    else:
        print('Zero Division Error')
except Exception as e:
    print("Something went wrong")

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

Πότε θα θέλατε να χειριστείτε πολλαπλές εξαιρέσεις;

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

  • Αιτήματα δικτύου που απέτυχαν για διαφορετικούς λόγους. Ανεξάρτητα από αυτό, μπορεί να θέλετε να ειδοποιήσετε τον χρήστη ότι δεν ήταν δυνατή η πρόσβαση στον διακομιστή.
  • Αποτυχημένες συνδέσεις βάσης δεδομένων, οι οποίες παράγουν πολλαπλά σφάλματα. Αν και αυτά τα σφάλματα μπορεί να είναι διαφορετικά, ο χειρισμός σας μπορεί να είναι ο ίδιος.
  • Το File I/O παράγει επίσης σφάλματα που μπορούν να αντιμετωπιστούν με παρόμοιο τρόπο, όπως σφάλματα άδειας και πλήρους δίσκου.

συμπέρασμα

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