Προχωρημένο Μάθημα Ανάπτυξης σε 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 eval(self):
await player.display("[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 eval(self):
await player.display("[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: error = await x.eval() player.speak(error) 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: error = await x.eval() player.speak(error) else: player.speak( "Temperature is ok" )
Κάντε το ίδιο για όλους τους θερμοσίφωνες, σε κάθε σημάδι X ενώ στραφείτε προς τους θερμοσίφωνες, εκτελώντας την ακολουθία χρησιμοποιώντας τις μεταβλητές σταθερές που αντιστοιχούν στα σωστά χαλιά ανά χρώμα, προκειμένου να ολοκληρώσετε το επίπεδο.