Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Διαχείριση Εξαιρέσεων
Προσαρμοσμένες Εξαιρέσεις
Στόχος
Χρησιμοποιήστε προσαρμοσμένες εξαιρέσεις για να συλλέξετε μηνύματα με παραγγελίες προϊόντων και να τα αποστείλετε μέσω περιστεριού ταχυδρόμου.
Κάποια μηνύματα αποστέλλονται διαμέσου του αγροκτήματος και σε άλλους σταθμούς μέσω περιστεριού ταχυδρόμου. Θα ήταν καλή ιδέα να στείλετε μερικά για να μείνετε μπροστά στο πρόγραμμα. Έχουμε παρακολουθεί σφάλματα χρησιμοποιώντας κοινές εξαιρέσεις, αλλά μερικές φορές μπορείτε να επωφεληθείτε δημιουργώντας τις δικές σας προσαρμοσμένες εξαιρέσεις για πολύ συγκεκριμένες περιπτώσεις. Θα συλλέξουμε μηνύματα και θα επιλέξουμε περιστέρια εντοπίζοντας τα σωστά στοιχεία χρησιμοποιώντας τις δικές μας προσαρμοσμένες εξαιρέσεις.
Οι προσαρμοσμένες εξαιρέσεις δημιουργούνται με τη δημιουργία κλάσεων. Προσθέτοντας την παράμετρο (Exception) μπορείτε να επαναχρησιμοποιήσετε μια κλάση για την εκτέλεση εξαιρέσεων. Για τους σκοπούς μας θα δημιουργήσουμε δύο: την InvalidLocation που ενεργοποιείται όταν μια συγκεκριμένη συμβολοσειρά δεν περνάει την επαλήθευση και την UnsuitableSelection που χρησιμοποιείται για να ελέγξει εάν ένας αριθμός ξεπερνά ένα συγκεκριμένο όριο.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Τώρα που οι κλάσεις έχουν ρυθμιστεί, ήρθε η ώρα να αποκτήσουμε τα σημειώματα για να σταλούν. Δημιουργήστε μια λίστα με όνομα prep για να αποθηκεύσετε και να συνδυάσετε τα συστατικά που απαιτούνται για την επικείμενη ανταλλαγή. Περπατήστε προς το σκοτεινό σημάδι Χ πάνω από το κόκκινο χαλί. Στον σειρά από τραπέζια με σημάδια Χ μπροστά τίμη, θα αναζητήσουμε σημειώματα που έχουν παραγγελίες προορισμού για τον δυτικό τομέα του αγροκτήματος.
Υπάρχουν τέσσερις μεταβλητές σταθερές που χρησιμοποιούνται σε αυτό το τμήμα: red_memo, blue_memo, green_memo και orange_memo. Μόνο τα σημειώματα που είναι επισημασμένα για παράδοση στον τομέα "west" πρέπει να συλλεχθούν ώστε να αποσταλούν. Για να καθορίσουμε αν θα παραλάβουμε το σημείωμα ή όχι, θα χρησιμοποιήσουμε τα μπλοκ try/except και else σε συνδυασμό με την προσαρμοσμένη εξαίρεση InvalidLocation. Για να χρησιμοποιήσετε την προσαρμοσμένη εξαίρεση, έχετε το μπλοκ try να ελέγχει αν το σημειώμα έχει ετικέτα "west" και, αν όχι, να σηκώνει την εξαίρεση. Το μπλοκ except επιβεβαιώνει ότι το σημειώμα είναι άκυρο και το μπλοκ else συλλέγει και προσθέτει στη λίστα prep το σημειώμα, αν αποδειχθεί ότι προορίζεται για τον τομέα "west". Για παράδειγμα:
try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)
Περπατήστε προς κάθε σκοτεινό σημάδι Χ πάνω από τα έγχρωμα χαλιά μπροστά από τα τραπέζια και εκτελέστε τη σειρά εξαιρέσεων χρησιμοποιώντας τις κατάλληλες μεταβλητές σταθερές που αντιστοιχούν σε κάθε χρώμα.
Μόλις συλλέξετε τα σημειώματα, περπατήστε προς το χρυσό σημάδι Χ μπροστά από την πόρτα και χρησιμοποιήστε τη συνάρτηση open() για να αποκτήσετε πρόσβαση στα κομψοστρώματα των περιστεριών. Μόλις μπείτε, περπατήστε προς το ανοιχτό σημάδι Χ, γυρίστε πίσω, και χρησιμοποιήστε τη συνάρτηση close() για να κλείσετε την πόρτα, ώστε να διασφαλίσετε ότι κανένα περιστέρι δεν ξεφεύγει.
Περπατήστε προς το σκοτεινό σημάδι Χ πάνω από το μωβ χαλί. Στα σπιρτικά κοντάτα θα επαληθεύσουμε αν το περιστέρι είναι αρκετά ώριμο για να πετάξει ένα μήνυμα ή αν είναι νεογέννητο και δεν μπορεί να κάνει παράδοση. Υπάρχουν τέσσερις ακόμη μεταβλητές σταθερές που θα χρησιμοποιηθούν σε αυτό το τμήμα: purple_pen, yellow_pen, white_pen και pink_pen, που αντιστοιχούν σε κάθε έγχρωμο χαλί. Θα χρησιμοποιήσουμε την ίδια τεχνική όπως με τα σημειώματα, χρησιμοποιώντας τη δεύτερη κλάση που ρυθμίστηκε.
Χρησιμοποιήστε τα μπλοκ try/except και else με την προσαρμοσμένη εξαίρεση UnsuitableSelection για να διαπιστώσετε αν το περιστέρι είναι αρκετά ώριμο για να κάνει την παράδοση. Το μπλοκ try ελέγχει αν η μεταβλητή σταθερά που αναπαριστά το σπιρούν έχει ένα κατάλληλο περιστέρι, ελέγχοντας αν το πουλί είναι νεότερο των δύο (2) ετών. Αν το περιστέρι είναι ακατάλληλο, ενεργοποιείται το μπλοκ except, αλλιώς το μπλοκ else ενεργοποιείται, επιτρέποντάς σας να προσθέσετε ένα περιστέρι στη λίστα prep για να παραδώσει το μήνυμα.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Πηγαίνετε σε κάθε σκοτεινό σημάδι Χ πάνω από τα έγχρωμα χαλιά και χρησιμοποιήστε αυτή τη σειρά με τη σωστή μεταβλητή σταθερά που αντιστοιχεί στο σωστό έγχρωμο χαλί. Μόλις συλλέξετε τα περιστέρια και τα μηνύματα, περπατήστε προς το χρυσό σημάδι Χ στο πολύ κάτω μέρος και χρησιμοποιήστε τη συνάρτηση place() με τη λίστα prep που δημιουργήσατε, ώστε να αποστείλετε τα περιστέρια για να παραδώσουν τα μηνύματα και να ολοκληρώσετε το επίπεδο.