Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Διαχείριση Εξαιρέσεων
Προσαρμογή Τάξεων Εξαιρέσεων
Στόχος
Επαληθεύστε το συλλεγμένο νερό της βροχής και βεβαιωθείτε ότι επεξεργάζεται και μεταφέρεται σωστά προσαρμόζοντας τις κλάσεις εξαίρεσης.
Στο απομακρυσμένο άκρο του συσσωρευμένου χώρου δαπέδου της στέγης υπάρχει μια δεξαμενή συλλεγμένου βροχερού νερού, το νερό αυτό φιλτράρεται και διανέμεται σε όλο το κτίριο για διάφορους σκοπούς. Μερικές βαλβίδες στον ανώτερο τοίχο ελέγχουν την πίεση του νερού που διαρρέει, ενώ ο τελευταίος αποθηκευτικός χώρος στεγάζει διάφορους θερμαντήρες νερού. Η λειτουργία των μηχανημάτων μπορεί να είναι περίπλοκη, ωστόσο η λειτουργία τους μπορεί να απλοποιηθεί αποτελεσματικά με την περιγραφή κωδικών σφάλματος και την εφαρμογή αποτελεσματικών αντενεργειών. Αυτό επιτυγχάνεται με την προσαρμογή των κλάσεων εξαίρεσης που δημιουργείτε για τις προσαρμοσμένες εξαιρέσεις σας.
Υπάρχουν δύο προσαρμοσμένες κλάσεις εξαίρεσης ρυθμισμένες στον επεξεργαστή κώδικα, και η δυνατότητά σας να τις χρησιμοποιήσετε θα είναι ουσιώδης για την αντιμετώπιση τυχόν προβλημάτων των μηχανημάτων που θα συναντήσετε. Η πρώτη είναι μια εξαίρεση για την αντιμετώπιση προβλημάτων πίεσης νερού. Προορίζεται να χρησιμοποιηθεί με τις βαλβίδες για να διασφαλίσει ότι το νερό ρέει σωστά στο σύμπλεγμα ή, εάν χρειάζεται, να ρυθμιστεί η πίεση. Ανάλογα με το αν η πίεση είναι κάτω από 100 ή πάνω από 300, λαμβάνεται διαφορετική ενέργεια από την εξαίρεση, ενώ η πίεση αποτελεί ένα όρισμα που πρέπει να παρέχει ο χρήστης. Μόλις ενεργοποιηθεί, εμφανίζεται ένα προσαρμοσμένο αναδυόμενο παράθυρο που περιέχει κωδικό σφάλματος και μήνυμα.
class PressureError(Exception):
def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404):
self.pressure = pressure
self.message = message
self.error_code = error_code
super().__init__(self.message)
async def __str__(self):
await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure))
if self.pressure < 100:
return ("Valve has been closed")
if self.pressure > 360:
return ("Valve has been opened")
Η δεύτερη προσαρμοσμένη κλάση εξαίρεσης προορίζεται για τη ρύθμιση της θερμοκρασίας στους θερμαντήρες νερού. Εάν η θερμοκρασία είναι πολύ χαμηλή ή πολύ υψηλή, πρέπει να εισάγετε μια νέα θερμοκρασία ως όρισμα ώστε να διορθωθεί το σφάλμα μόλις εμφανιστεί.
class TemperatureError(Exception):
def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808):
self.temp = temp
self.message = message
self.error_code = error_code
super().__init__(self.message)
async def __str__(self):
await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp))
return ("Temperature Corrected")
Για να ξεκινήσετε, περπατήστε μέχρι το ελαφρύ σημάδι X πάνω από το πράσινο χαλί και στραφείτε προς την δεξαμενή με τη βαλβίδα. Υπάρχουν τέσσερις (4) τέτοιες που ρυθμίζουν την πίεση του νερού που αντλείται από τη δεξαμενή. Υπάρχουν τέσσερις (4) σταθερές μεταβλητές: green_pressure, red_pressure, blue_pressure και orange_pressure, οι οποίες διατηρούν την πίεση κάθε δεξαμενής των αντίστοιχων χαλιών με τα συγκεκριμένα χρώματα.
Σε όλα τα ελαφριά σημάδια X, χρησιμοποιήστε τις ακολουθίες μπλοκ κώδικα try/except και else για να επαληθεύσετε εάν η πίεση σε κάθε δεξαμενή είναι κατάλληλη. Εάν η πίεση είναι κάτω από 100 ή αν είναι πάνω από 300, εγείρετε την προσαρμοσμένη εξαίρεση PressureError και προσθέστε την πίεση ως όρισμα. Εάν ενεργοποιηθεί, θα εμφανιστεί ο κωδικός σφάλματος και θα ληφθεί δράση επιδιόρθωσης, διαφορετικά θα ενεργοποιηθεί η ρήτρα else επιβεβαιώνοντας ότι η πίεση στη δεξαμενή είναι κατάλληλη. Για παράδειγμα:
try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: player.speak(x) else: player.speak( "Pressure is appropriate" )
Κάντε αυτό σε όλα τα ελαφριά σημάδια X, χρησιμοποιώντας τις σταθερές μεταβλητές που αντιστοιχούν σε κάθε από τα χαλιά με τα αντίστοιχα χρώματα, και είτε επαληθεύστε είτε ρυθμίστε τις βαλβίδες πίεσης ανάλογα με τις ανάγκες.
Μόλις ολοκληρώσετε, περπατήστε μέχρι το χρυσό σημάδι X και χρησιμοποιήστε τη συνάρτηση open() για να αποκτήσετε πρόσβαση στον αποθηκευτικό χώρο με τον θερμαντήρα νερού. Μόλις βρεθείτε μέσα, περπατήστε μέχρι το χρυσό σημάδι X που βρίσκεται μέσα στον αποθηκευτικό χώρο και χρησιμοποιήστε τη συνάρτηση read() για να διαβάσετε το σημείωμα στον πάγκο. Αυτό το σημείωμα θα σας δώσει πληροφορίες σχετικά με την ιδανική θερμοκρασία για κάθε έναν από τους θερμαντήρες νερού.
Μόλις αποκτήσετε τις πληροφορίες για κάθε θερμοκρασία, περπατήστε προς το σκοτεινό σημάδι X πάνω από το μωβ χαλί. Εδώ θα χρησιμοποιήσουμε την ακολουθία κώδικα try/except και else για να επαληθεύσουμε ότι οι θερμαντήρες νερού βρίσκονται στην κατάλληλη θερμοκρασία. Υπάρχουν τέσσερις (4) επιπλέον σταθερές μεταβλητές που σχετίζονται με τα χαλιά των χρωμάτων: purple_temperature, yellow_temperature, pink_temperature και white_temperature.
Στην ακολουθία αυτή, θα επαληθεύσουμε εάν η θερμοκρασία είναι κάτω από 100. Εάν αυτό ισχύει, θα εγείρουμε την εξαίρεση TemperatureError. Ως προσαρμοσμένη εξαίρεση, αυτή δέχεται ένα όρισμα. Σε αυτήν την περίπτωση, πρέπει να εισάγετε τη θερμοκρασία που διαβάσατε στο σημείωμα, ώστε να εκτελεστεί σωστά η αντενέργεια της εξαίρεσης για να διορθωθεί το πρόβλημα. Για παράδειγμα:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Κάντε αυτό για όλους τους θερμαντήρες νερού. Σε κάθε σημάδι X, ενώ απευθύνεστε προς τους θερμαντήρες, εκτελέστε την ακολουθία χρησιμοποιώντας τις σταθερές μεταβλητές που αντιστοιχούν στα σωστά, χρωματισμένα χαλιά, ώστε να ολοκληρώσετε το επίπεδο.