Coding for KidsCoding for Kids
Δημιουργικά ΕπίπεδαΠροκλήσειςΟδηγός Εκπαιδευτικού
Ψηφίστε για λειτουργίες
Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο

Διαχείριση Εξαιρέσεων
Ολοκληρώνοντας μια εξαίρεση

Στόχος

Πηγαίνετε στο γραφείο και βεβαιωθείτε ότι η χρηματική προμήθεια είναι σωστά ισορροπημένη χρησιμοποιώντας το τελικά μπλοκ κώδικα και τη λέξη-κλειδί assert.

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

Εκτός από τα μπλοκ κώδικα try / except και else, υπάρχει επίσης το μπλοκ κώδικα finally που σας επιτρέπει να ολοκληρώσετε μια εξαίρεση. Επιπλέον, η λέξη-κλειδί assert είναι μια δυνατότητα εντοπισμού σφαλμάτων που σας επιτρέπει να ελέγξετε αν ο κώδικας έχει σφάλματα, δίνοντάς σας τη δυνατότητα να διορθώσετε τυχόν προβληματικό κώδικα.

Ξεκινήστε μεταβαίνοντας προς το ελαφρύ σημάδι X μπροστά από την πόρτα του γραφείου και χρησιμοποιώντας τη συνάρτηση open() για να ανοίξετε την πόρτα και να εισέλθετε. Μόλις μπείτε, κατευθυνθείτε προς το χρυσό σημάδι X και χρησιμοποιήστε τη συνάρτηση collect() για να μαζέψετε δύο διαφορετικές σταθερές με ονόματα: categories και savings. Η σταθερά categories είναι μια λίστα που περιέχει την χρηματική προμήθεια των τριών κατηγοριών, με ονόματα: "exports", "imports", "stock", που πρέπει να επαληθευτούν. Η σταθερά savings είναι μια μεταβλητή που περιέχει την χρηματική προμήθεια που μπορεί να χρειαστεί για να διασφαλιστεί ότι τα ταμεία είναι επαρκώς εφοδιασμένα.

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

Κάθε σακούλα πρέπει να περιέχει τα στοιχεία που βρίσκονται μέσα στη λίστα categories. Υπάρχουν τρεις σταθερές λεξικών που αντιστοιχούν σε κάθε σακούλα: blue_sack, yellow_sack και red_sack. Εκτελέστε έναν βρόχο for ενώ στέκεστε στο σημάδι X πάνω από το γαλάζιο χαλί για να επαληθεύσετε ότι η σακούλα περιέχει όλα τα απαιτούμενα υλικά και μετά επιβεβαιώστε ότι η προμήθεια έχει καταγραφεί.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Μερικές από τις σακούλες θα πρέπει να περιέχουν όλα τα απαραίτητα υλικά, αλλά όπως και συνήθως σε αυτές τις ασκήσεις, μπορεί να συναντήσετε ένα σφάλμα. Αν αντιμετωπίσετε πρόβλημα, πρέπει να χρησιμοποιήσετε τα μπλοκ κώδικα try / except για να πιάσετε το σφάλμα, σε αυτή την περίπτωση ένα KeyError:, το οποίο συμβαίνει όταν ένα κλειδί σε ένα λεξικό δεν βρεθεί. Όταν συμβεί αυτό, προσθέτουμε επίσης το finally στην εξαίρεση, το οποίο ολοκληρώνει τη διαχείριση της εξαίρεσης με την εκτέλεση κώδικα που τρέχει πάντα στο τέλος κάθε διαχείρισης εξαιρέσεων. Σε αντίθεση με τις εξαιρέσεις, μπορεί να υπάρχει μόνο ένα μπλοκ finally ανά try. Για παράδειγμα, στην περίπτωση της blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Επαναλάβετε αυτή τη διαδικασία στα σκοτεινά σημάδια X πάνω από τα κίτρινα και κόκκινα χαλιά, χρησιμοποιώντας τις σταθερές λεξικών yellow_sack και red_sack. Μπορεί να μην είναι απαραίτητο σε ορισμένες περιπτώσεις, καθώς το σφάλμα εμφανίζεται μόνο εάν λείπει κάποιο αντικείμενο στις σακούλες.

Τώρα που οι σακούλες έχουν επαληθευτεί, είναι ώρα να προχωρήσετε στα σεντούκια μπροστά από τα: πράσινα, μοβ και πορτοκαλί χαλιά. Εδώ πρέπει να διασφαλιστεί ότι η χρηματική προμήθεια είναι ακριβώς 30 σε κάθε σεντούκι και στη συνέχεια να κλειστεί. Υπάρχουν τρεις μεταβλητές σταθερών που αντιστοιχούν σε κάθε σεντούκι, με ονόματα: green_chest, purple_chest και orange_chest.

Το μεγαλύτερο πρόβλημα με την επαλήθευση των σεντουκιών είναι ότι δεν γνωρίζουμε τα ακριβή περιεχόμενά τους. Όταν ασχολείστε με άγνωστες τιμές, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί assert. Αυτή η λέξη-κλειδί σας επιτρέπει να επαληθεύσετε εάν μια δήλωση που κάνετε είναι αληθής ή ψευδής, κάτι που είναι πολύ χρήσιμο για τον έλεγχο εάν ο κώδικας σας έχει σφάλματα. Η λέξη-κλειδί assert χρησιμοποιείται σε συνδυασμό με: try, except, else και final και τις διάφορες συνδυαστικές τους μορφές για να διορθώνουν ο κώδικας που έχει σφάλματα. Για παράδειγμα, στην περίπτωση του green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

Στον παραπάνω κώδικα, επαληθεύουμε εάν το green_chest περιέχει την κατάλληλη ποσότητα χρηματικής προμήθειας χρησιμοποιώντας τη λέξη-κλειδί assert. Αν δεν περιέχει τη σωστή ποσότητα, ενεργοποιείται το μπλοκ except και υπολογίζουμε, στη συνέχεια, αφαιρούμε την ελλείπουσα προμήθεια από τη μεταβλητή savings και την προσθέτουμε στο σεντούκι. Αν η προμήθεια είναι πλήρης, ενεργοποιείται το μπλοκ else και επιβεβαιώνεται ότι έχουν καταγραφεί όλα τα στοιχεία. Μόλις επαληθευτεί ότι όλα είναι σωστά, εκτελείται το μπλοκ finally και καλείται η συνάρτηση close() για να κλείσει το σεντούκι.

Στα σημάδια X πάνω από τα πράσινα, μοβ και πορτοκαλί χαλιά, στραφείτε προς τα σεντούκια και τρέξτε την επαλήθευση χρησιμοποιώντας: green_chest, purple_chest, orange_chest στα αντίστοιχα χαλιά. Μόλις τελειώσετε, περπατήστε προς το ελαφρύ σημάδι X και χρησιμοποιήστε τη συνάρτηση place() για να αποθηκεύσετε το υπόλοιπο της μεταβλητής savings στην κάσα, προκειμένου να ολοκληρωθεί το επίπεδο.

Βιβλίο Κώδικα