Η δομή try-except είναι ένα σημαντικό χαρακτηριστικό της Python που χρησιμοποιείται για την ανίχνευση και την αντιμετώπιση σφαλμάτων στον κώδικα. Αυτή η δομή επιτρέπει την εκτέλεση μιας σειράς εντολών και, σε περίπτωση που προκύψει σφάλμα, αναλαμβάνει τη διαχείριση αυτού του σφάλματος.
Μπορείτε να χρησιμοποιήσετε τη δομή try-except στον κώδικά σας ως εξής:
try: # Κώδικας που προκαλεί σφάλμα except: # Κώδικας που εκτελείται σε περίπτωση σφάλματος else: # Κώδικας που εκτελείται αν δεν υπάρχει σφάλμα finally: # Κώδικας που εκτελείται πάντα, ακόμα και αν υπάρχει σφάλμα
Ο κώδικας παρουσιάζει τη δομή try-except-finally στην Python. Ας εξηγήσουμε τι κάνει κάθε μέρος του κώδικα:
- Ο κώδικας που βρίσκεται μέσα στο μπλοκ try είναι ο κώδικας που εκτελείται αρχικά.
- Αν συμβεί ένα σφάλμα κατά την εκτέλεση του μπλοκ try, το σφάλμα πιάνεται από τον αντίστοιχο τύπο σφάλματος στο μπλοκ except. Ο κώδικας που βρίσκεται μέσα στο μπλοκ except εκτελείται σε περίπτωση σφάλματος.
- Αν δεν συμβεί κανένα σφάλμα κατά την εκτέλεση του μπλοκ try, ο κώδικας που βρίσκεται μέσα στο μπλοκ else εκτελείται.
- Ο κώδικας που βρίσκεται μέσα στο μπλοκ finally εκτελείται πάντα, ανεξάρτητα από την εμφάνιση ή μη σφάλματος. Αυτός ο κώδικας χρησιμοποιείται συνήθως για την καθαρισμό πόρων ή για εκτέλεση κώδικα που πρέπει να εκτελεστεί ανεξάρτητα από την εμφάνιση σφάλματος.
Μπορείτε επίσης να χρησιμοποιήσετε τη δομή try-except με συγκεκριμένα μηνύματα σφάλματος, που μπορούν να εμφανιστούν όταν προκύψει σφάλμα. Για παράδειγμα:
try: # Κώδικας που μπορεί να προκαλέσει σφάλμα # Προσπάθεια εκτέλεσης ενός κομματιού κώδικα except ExceptionType: # Κώδικας που εκτελείται αν προκύψει το συγκεκριμένο σφάλμα # Εμφάνιση συγκεκριμένου μηνύματος σφάλματος
Η παραπάνω δομή try-except σας επιτρέπει να προσθέσετε αντιμετώπιση σφαλμάτων στον κώδικά σας. Ο κώδικας που μπορεί να προκαλέσει σφάλμα τοποθετείται μέσα στην περιοχή try
. Αν προκύψει κάποιο σφάλμα κατά την εκτέλεση του κώδικα αυτού, η εκτέλεση μεταφέρεται στην περιοχή except
, όπου μπορείτε να προσδιορίσετε τον τύπο του σφάλματος που θέλετε να αντιμετωπίσετε. Εντός της περιοχής except
, μπορείτε να τοποθετήσετε τον κώδικα που θα εκτελείται αν προκύψει το συγκεκριμένο σφάλμα. Επίσης, μπορείτε να εμφανίσετε ένα προσαρμοσμένο μήνυμα σφάλματος για να παρέχετε περισσότερες πληροφορίες για το σφάλμα που προέκυψε.
Όταν συμβεί ένα σφάλμα ή μια εξαίρεση στην Python, μπορούμε να τη χειριστούμε χρησιμοποιώντας τη δομή try-except. Η δομή try-except επιτρέπει να εκτελέσουμε κώδικα μέσα σε ένα μπλοκ try και να αντιδράσουμε σε εξαιρέσεις που μπορεί να προκύψουν.
Η σύνταξη της δομής try-except είναι η εξής:
try: # Κώδικας που μπορεί να προκαλέσει εξαίρεση # ... except ΤύποςΕξαίρεσης: # Κώδικας για την αντιμετώπιση της εξαίρεσης # ...
Μέσα στο μπλοκ try τοποθετούμε τον κώδικα που μπορεί να προκαλέσει εξαίρεση. Αν συμβεί μια εξαίρεση, η εκτέλεση του κώδικα στο μπλοκ try διακόπτεται και μεταφέρεται στον αντίστοιχο κώδικα εντός του μπλοκ except που αντιστοιχεί στον τύπο της εξαίρεσης.
Με την χρήση της δομής try-except, μπορούμε να αντιδράσουμε στις εξαιρέσεις και να εκτελέσουμε ειδικές ενέργειες, όπως εκτύπωση μηνυμάτων, ανακατεύθυνση της εκτέλεσης, ή οτιδήποτε άλλο χρειαστεί για την αποτελεσματική διαχείριση των εξαιρέσεων στο πρόγραμμά μας.
[adinserter block=”2″]
Παραδείγματα:
Παράδειγμα: Χρήση της δήλωσης try-except για τον χειρισμό μιας εξαίρεσης TypeError
try: x = 10 / 'a' # Προσπάθεια διαίρεσης του αριθμού 10 με τον χαρακτήρα 'a' except TypeError: # Αν προκύψει εξαίρεση TypeError, εκτυπώνεται το παρακάτω μήνυμα print('An error occurred of type (TypeError).')
Ο παραπάνω κώδικας δείχνει τη χρήση της δομής try-except
για την αντιμετώπιση εξαιρέσεων στην Python.
Στον κώδικα, προσπαθούμε να διαίρεσουμε τον αριθμό 10 με τον χαρακτήρα ‘a’, που είναι μη έγκυρη λειτουργία και θα προκαλέσει ένα TypeError
. Μέσα στη δομή try
, εκτελούμε την πιθανή επικίνδυνη λειτουργία.
Όταν προκύψει η εξαίρεση TypeError
, η εκτέλεση του κώδικα θα μεταφερθεί αυτόματα στην δομή except
. Σε αυτή την περίπτωση, το μήνυμα 'An error occurred of type (TypeError).'
θα εμφανιστεί στην οθόνη.
Η χρήση της δομής try-except
μας επιτρέπει να αντιμετωπίσουμε εξαιρέσεις και να διαχειριστούμε τη ροή του προγράμματος ακόμα και όταν προκύπτουν σφάλματα, προσφέροντας έναν τρόπο να εκτελέσουμε εναλλακτικές ενέργειες ή να παρέχουμε επεξηγηματικά μηνύματα για τον χρήστη.
Παράδειγμα: Χρήση της δήλωσης try-except-finally για τον χειρισμό μιας εξαίρεσης FileNotFoundError κατά την ανάγνωση ενός αρχείου και κλείσιμο του αρχείου με το finally block
try: file = open('example.txt', 'r') # Ανοίγει το αρχείο 'example.txt' σε κατάσταση ανάγνωσης ('r') file_content = file.read() # Διαβάζει το περιεχόμενο του αρχείου print(file_content) # Εκτυπώνει το περιεχόμενο του αρχείου except FileNotFoundError: print('The file was not found.') # Εκτυπώνει μήνυμα ότι το αρχείο δεν βρέθηκε finally: file.close() # Κλείνει το αρχείο
Ο κώδικας προσπαθεί να ανοίξει ένα αρχείο με όνομα “example.txt” για ανάγνωση (“r”). Αν το αρχείο υπάρχει, το περιεχόμενό του αναγνωρίζεται και αποθηκεύεται στη μεταβλητή file_content
. Έπειτα, το περιεχόμενο του αρχείου εκτυπώνεται στην οθόνη.
Αν το αρχείο δεν βρεθεί, παράγεται μια εξαίρεση τύπου FileNotFoundError
και εκτελείται η αντίστοιχη παράγραφος κώδικα στο block except
. Σε αυτή την περίπτωση, εμφανίζεται το μήνυμα “The file was not found.”
Τέλος, στο block finally
, ανεξάρτητα από το αν πραγματοποιήθηκε επιτυχής ανάγνωση ή όχι, το αρχείο κλείνεται με τη χρήση της μεθόδου close()
. Αυτό είναι σημαντικό για να διασφαλιστεί ότι οι πόροι του συστήματος αρχείων απελευθερώνονται σωστά και να αποφεύγονται προβλήματα διαχείρισης πόρων.
Μπορείτε να ορίσετε όσα blocks εξαιρέσεων χρειάζεστε στον κώδικά σας, προκειμένου να εκτελέσετε ειδικές ενέργειες για διάφορα είδη σφαλμάτων. Αυτό γίνεται με τη χρήση της δήλωσης try
μαζί με τις δηλώσεις except
.
Μπορείτε να ορίσετε πολλά blocks except
με διαφορετικούς τύπους εξαιρέσεων. Αυτό σας επιτρέπει να εκτελέσετε διαφορετικό κώδικα για κάθε είδος εξαίρεσης που προκύπτει. Μπορείτε επίσης να χρησιμοποιήσετε τη δήλωση finally
για να καθορίσετε κώδικα που θα εκτελεστεί πάντα, ανεξάρτητα από το αν προκύπτει εξαίρεση ή όχι. Αυτό είναι χρήσιμο για να εξασφαλίσετε την απελευθέρωση πόρων και τη διαχείριση των εξαιρέσεων στον κώδικά σας.
Παράδειγμα – Εκτυπώστε ένα μήνυμα εάν το try block προκαλεί μια NameError και ένα άλλο για άλλα σφάλματα:
try: print(x) # Προσπάθεια εκτύπωσης της μεταβλητής x except NameError: print("The variable x is not defined.") # Εκτυπώνεται αν η NameError εμφανιστεί except: print("Something went wrong while executing the code.") # Εκτυπώνεται αν εμφανιστεί οποιοδήποτε άλλο σφάλμα
Ο παραπάνω κώδικας χρησιμοποιεί τη δομή try-except
για να αντιμετωπίσει πιθανές εξαιρέσεις που μπορεί να προκύψουν κατά την εκτέλεση του κώδικα.
Μέσα στην δομή try
, προσπαθούμε να εκτυπώσουμε τη μεταβλητή x
. Εάν η μεταβλητή x
δεν έχει οριστεί (δηλαδή εμφανιστεί η NameError
), εκτυπώνεται το μήνυμα “The variable x is not defined.”.
[adinserter block=”3″]
Αν εμφανιστεί οποιοδήποτε άλλο σφάλμα μέσα στην try
, που δεν αντιστοιχεί σε NameError
, εκτελείται η except
χωρίς συγκεκριμένο τύπο σφάλματος. Σε αυτήν την περίπτωση, εκτυπώνεται το μήνυμα “Something went wrong while executing the code.”.
Με την χρήση της δομής try-except
, αντιμετωπίζουμε τις εξαιρέσεις και ελέγχουμε τη ροή του προγράμματος, προσφέροντας μια εναλλακτική εκτέλεση κώδικα όταν αντιμετωπίζουμε σφάλματα.
Μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί else για να ορίσετε ένα block κώδικα που θα εκτελείται εάν δεν προκληθούν σφάλματα:
Παράδειγμα – Το try block δεν προκαλέσει κανένα σφάλμα:
try: print("Hello World") # Εκτύπωση του μηνύματος "Hello World" except: print("Something went wrong") # Εκτέλεση αν κάτι πήγε στραβά μέσα στο block του try else: print("Nothing went wrong") # Εκτέλεση αν δεν προέκυψε κάποιο σφάλμα μέσα στο block του try
Ο κώδικας παραπάνω περιέχει ένα block try-except-else
. Ας αναλύσουμε τη λειτουργία του:
- Στο block
try
, η εντολήprint("Hello World")
εκτελείται. Αυτή η εντολή εκτυπώνει το μήνυμα “Hello World”. - Εάν κατά την εκτέλεση της εντολής στο block
try
προκύψει κάποιο σφάλμα, τότε η εκτέλεση μεταφέρεται στο blockexcept
. Σε αυτήν την περίπτωση, η εντολήprint("Something went wrong")
εκτελείται, και εμφανίζεται το μήνυμα “Something went wrong”. - Αν δεν προκύψει κάποιο σφάλμα κατά την εκτέλεση της εντολής στο block
try
, τότε η εκτέλεση συνεχίζεται στο blockelse
. Σε αυτήν την περίπτωση, η εντολήprint("Nothing went wrong")
εκτελείται, και εμφανίζεται το μήνυμα “Nothing went wrong”.
Αυτός ο μηχανισμός try-except-else
χρησιμοποιείται για να αντιληφθείτε αν κάποια εντολή εκτελέστηκε με επιτυχία ή αν προέκυψε κάποιο σφάλμα. Μέσω του block except
, μπορείτε να αντιδράσετε σε συγκεκριμένα είδη σφαλμάτων και να παράσχετε κατάλληλα μηνύματα ή ενέργειες αντίδρασης.
Το block του finally
, εάν δηλωθεί, θα εκτελεστεί ανεξάρτητα από το εάν το try
block προκαλεί σφάλμα ή όχι.
Παράδειγμα:
try: print(x) # Εκτύπωση της μεταβλητής x except: print("Something went wrong") # Εκτύπωση μηνύματος λάθους finally: print("The 'try except' block is finished") # Εκτύπωση μηνύματος ολοκλήρωσης του block
Ο παραπάνω κώδικας περιέχει ένα block try-except-finally.
Μέσα στο block try, υπάρχει η εντολή print(x)
, που εκτυπώνει την μεταβλητή x
. Αν η μεταβλητή x
δεν έχει οριστεί ή είναι μηδενική, τότε προκύπτει ένα σφάλμα και εκτελείται η εντολή print("Something went wrong")
μέσα στο block except, εμφανίζοντας ένα μήνυμα λάθους.
Στη συνέχεια, ανεξαρτήτως αν προκύψει σφάλμα ή όχι, εκτελείται η εντολή print("The 'try except' block is finished")
μέσα στο block finally, εμφανίζοντας ένα μήνυμα για την ολοκλήρωση του block try-except.
Παράδειγμα – Προσπαθήστε να ανοίξετε και να γράψετε σε ένα αρχείο που δεν είναι εγγράψιμο:
# Ανοίγουμε το αρχείο "myfile.txt" για εγγραφή και γράφουμε το κείμενο "Hello World!" # Αν συμβεί κάποιο σφάλμα κατά την εγγραφή στο αρχείο, θα εκτελεστεί η ενότητα except try: file = open("myfile.txt") # Ανοίγουμε το αρχείο "myfile.txt" file.write("Hello World!") # Προσπαθούμε να γράψουμε το κείμενο "Hello World!" στο αρχείο except: print("Something went wrong when writing to the file") # Εκτυπώνουμε μήνυμα λάθους αν κάτι πάει στραβά finally: file.close() # Κλείνουμε το αρχείο για να απελευθερώσουμε τους πόρους # Η χρήση της δομής try-except-finally μας επιτρέπει να διαχειριστούμε σφάλματα κατά την εκτέλεση του κώδικα # Στην περίπτωση που συμβεί κάποιο σφάλμα κατά την εγγραφή στο αρχείο, # θα εκτελεστεί η ενότητα except και θα εκτυπωθεί το μήνυμα λάθους # Ανεξάρτητα από το αν συμβεί σφάλμα ή όχι, η ενότητα finally θα εκτελεστεί και θα κλείσει το αρχείο
Ο κώδικας παραπάνω δείχνει τη χρήση της δομής try-except-finally
για τη διαχείριση σφαλμάτων κατά την εγγραφή σε ένα αρχείο.
Στην ενότητα try
, ανοίγουμε το αρχείο “myfile.txt” για εγγραφή και προσπαθούμε να γράψουμε το κείμενο “Hello World!” στο αρχείο.
Αν συμβεί κάποιο σφάλμα κατά την εγγραφή, η ενότητα except
θα εκτελεστεί και θα εκτυπωθεί το μήνυμα “Something went wrong when writing to the file”.
[adinserter block=”4″]
Ανεξάρτητα από το αν συμβεί σφάλμα ή όχι, η ενότητα finally
θα εκτελεστεί πάντα. Σε αυτήν την περίπτωση, κλείνουμε το αρχείο με τη μέθοδο close()
για να απελευθερώσουμε τους πόρους του αρχείου.
Για να προκαλέσετε μια εξαίρεση στην Python, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί “raise”.
Παράδειγμα – Προκαλέστε ένα σφάλμα και σταματήστε το πρόγραμμα αν η μεταβλητή x είναι μικρότερη από 0:
x = -1 if x < 0: raise Exception("x cannot be less than 0") # Αν υπάρχει αρνητική τιμή για το x, προκαλείται μια εξαίρεση με μήνυμα # Ο κώδικας αυτός ελέγχει αν η μεταβλητή x είναι μικρότερη από το 0. Αν ισχύει αυτή η συνθήκη, τότε προκαλείται μια εξαίρεση (Exception) με ένα συγκεκριμένο μήνυμα που δηλώνει ότι το x δεν μπορεί να είναι μικρότερο από το 0. Ο σκοπός αυτής της εξαίρεσης είναι να διακόψει την εκτέλεση του προγράμματος και να εμφανίσει ένα μήνυμα λάθους στο χρήστη.
Ο κώδικας αυτός ελέγχει αν η μεταβλητή x
είναι μικρότερη από το 0. Αν η συνθήκη x < 0
ισχύει, τότε προκαλείται μια εξαίρεση (Exception) με ένα συγκεκριμένο μήνυμα που δηλώνει ότι το x
δεν μπορεί να είναι μικρότερο από το 0. Ο σκοπός αυτής της εξαίρεσης είναι να διακόψει την εκτέλεση του προγράμματος και να εμφανίσει ένα μήνυμα λάθους στον χρήστη. Αυτό μπορεί να βοηθήσει στην εντοπισμό και διόρθωση προβλημάτων κατά την εκτέλεση του προγράμματος.
Με τη χρήση της δήλωσης raise Exception("κείμενο")
, μπορείτε να ορίσετε το είδος του σφάλματος που θα προκαλείται και το κείμενο που θα εμφανίζεται στον χρήστη. Για παράδειγμα, αντί για τη γενική εξαίρεση Exception
, μπορείτε να χρησιμοποιήσετε πιο συγκεκριμένες κλάσεις εξαιρέσεων όπως ValueError
, TypeError
, NameError
κλπ., ανάλογα με το είδος του προβλήματος που θέλετε να αναφέρετε. Το κείμενο που περνάτε ως παράμετρο θα είναι το μήνυμα που θα εμφανίζεται στον χρήστη για να τον ενημερώσει για το συγκεκριμένο σφάλμα που προέκυψε.
Παράδειγμα – Προκαλέστε ένα σφάλμα TypeError αν η μεταβλητή x δεν είναι ακέραιος:
x = "hello" # Έλεγχος τύπου με τη χρήση της συνάρτησης isinstance() if not isinstance(x, int): raise TypeError("x must be an integer") # Αν το x δεν είναι ακέραιος, εκτίναξε TypeError
Ο παραπάνω κώδικας ελέγχει αν η μεταβλητή x
είναι ακέραιος (integer) χρησιμοποιώντας τη συνάρτηση isinstance()
. Αν η συνθήκη not isinstance(x, int)
είναι αληθής, τότε εκτελείται η εντολή raise TypeError("x must be an integer")
, η οποία εκτοξεύει μια εξαίρεση τύπου TypeError
με το μήνυμα “x must be an integer”. Αυτό σημαίνει ότι αν η μεταβλητή x
δεν είναι ακέραιος, θα προκληθεί σφάλμα και θα εμφανιστεί το σχετικό μήνυμα σφάλματος.