Sobes.tech
Junior

Ποια είναι τα χαρακτηριστικά της διαχείρισης εξαιρέσεων στην Python;

sobes.tech AI

Απάντηση από AI

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

Χαρακτηριστικά:

  • Ιεραρχία εξαιρέσεων: Όλες οι ενσωματωμένες εξαιρέσεις είναι κλάσεις και οργανώνονται σε μια ιεραρχία βασισμένη στην κληρονομικότητα από τη βασική κλάση BaseException.
    # Παράδειγμα ιεραρχίας
    # BaseException -> Exception -> StandardError -> ...
    #                  Exception -> ArithmeticError -> ZeroDivisionError
    
  • Μπλοκ try...except...: Ο βασικός μηχανισμός χειρισμού εξαιρέσεων.
    try:
        # Κώδικας που μπορεί να προκαλέσει εξαίρεση
        result = 10 / 0
    except ZeroDivisionError:
        # Χειρισμός συγκεκριμένης εξαίρεσης
        print("Διαίρεση με το μηδέν!")
    except Exception as e:
        # Χειρισμός άλλων εξαιρέσεων
        print(f"Παρουσιάστηκε σφάλμα: {e}")
    
  • Πολλαπλά except μπλοκ: Επιτρέπουν το χειρισμό διαφορετικών τύπων εξαιρέσεων με διαφορετικό τρόπο.
    try:
        # Κώδικας
        value = int("abc")
    except ValueError:
        print("Μη έγκυρη μορφή αριθμού.")
    except TypeError:
        print("Μη έγκυρος τύπος δεδομένων.")
    
  • Μπλοκ else: Εκτελείται αν το μπλοκ try ολοκληρωθεί χωρίς εξαίρεση.
    try:
        # Κώδικας
        result = 10 / 2
    except ZeroDivisionError:
        print("Διαίρεση με το μηδέν!")
    else:
        print("Η λειτουργία ολοκληρώθηκε με επιτυχία.")
    
  • Μπλοκ finally: Εκτελείται πάντα, ανεξάρτητα αν προέκυψε εξαίρεση ή όχι. Χρησιμοποιείται για απελευθέρωση πόρων.
    file = None
    try:
        file = open("myfile.txt", "r")
        # Ανάγνωση από το αρχείο
    except FileNotFoundError:
        print("Το αρχείο δεν βρέθηκε.")
    finally:
        if file:
            file.close() # Εγγυημένο κλείσιμο αρχείου
    
  • Οδηγός raise: Χρησιμοποιείται για ρητό κάλεσμα εξαίρεσης.
    def divide(a, b):
        if b == 0:
            raise ZeroDivisionError("Δεν επιτρέπεται η διαίρεση με το μηδέν")
        return a / b
    
    try:
        divide(10, 0)
    except ZeroDivisionError as e:
        print(f"Σφάλμα: {e}")
    
  • Προσαρμοσμένες εξαιρέσεις: Μπορείτε να δημιουργήσετε δικούς σας κλάσεις εξαιρέσεων κληρονομώντας από το Exception ή άλλη υπάρχουσα κλάση εξαιρέσεων.
    class CustomError(Exception):
        pass
    
    def process_data(data):
        if not data:
            raise CustomError("Τα δεδομένα είναι κενά")
    
    try:
        process_data([])
    except CustomError as e:
        print(f"Σφάλμα: {e}")
    
  • Χειρισμός εξαιρέσεων με χρήση του διαχειριστή πλαισίου with: Απλοποιεί τη διαχείριση πόρων που απαιτούν ρητό κλείσιμο (π.χ. αρχεία).
    try:
        with open("myfile.txt", "r") as file:
            # Εργασία με το αρχείο
            content = file.read()
    except FileNotFoundError:
        print("Το αρχείο δεν βρέθηκε.")
    # Το αρχείο κλείνει αυτόματα κατά την έξοδο από το μπλοκ 'with'
    
  • Σύνδεση εξαιρέσεων: Κατά την επεξεργασία μιας εξαίρεσης, μπορείτε να διατηρήσετε πληροφορίες σχετικά με την προηγούμενη εξαίρεση (έμμεσα ή με χρήση raise Exception from another_exception).

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