Cours avancé de développement Python
Chapitre
>
Niveau
Gestion des exceptions
Personnalisation des classes d'exception
Objectif
Vérifiez l'eau de pluie collectée et assurez-vous qu'elle est traitée et transférée correctement en personnalisant les classes d'exception.
Au bout du complexe de toits se trouve une citerne d'eau de pluie collectée, cette eau est filtrée et distribuée dans tout le bâtiment pour diverses utilisations. Certaines valves sur le mur supérieur contrôlent la pression de l'eau qui circule, tandis que la dernière réserve abrite divers chauffe-eau. Le fonctionnement des machines peut être délicat, cependant leur opération peut être rationalisée efficacement en définissant des codes d'erreur et en mettant en place des contre-mesures efficaces. Ceci est réalisé en personnalisant les classes d'exception que vous créez pour vos exceptions personnalisées.
Il y a deux classes d'exception personnalisées mises en place dans l'éditeur de code, votre capacité à les utiliser sera essentielle pour résoudre tout problème de machine que vous rencontrerez. La première est une exception pour dépanner la pression de l'eau. Elle est destinée à être utilisée avec les valves pour s'assurer que l'eau circule correctement dans le complexe ou pour ajuster la pression si nécessaire. Selon que la pression soit inférieure à 100 ou supérieure à 300, une action différente sera entreprise par l'exception, la pression étant un argument que l'utilisateur doit fournir. Une fois déclenchée, une fenêtre contextuelle personnalisée affichant un code d'erreur et un message est affichée.
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")
La deuxième classe d'exception personnalisée est destinée à moduler la température dans les chauffe-eau. Si la température est trop basse ou trop élevée, vous devez entrer une nouvelle température en argument afin de corriger l'erreur dès qu'elle se produit.
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")
Pour commencer, rendez-vous à la marque X lumineuse sur le tapis vert et faites face au réservoir avec une valve, il y en a quatre (4) qui régulent la pression de l'eau pompée depuis la citerne. Il existe quatre constantes variables : green_pressure, red_pressure, blue_pressure et orange_pressure, qui contiennent la pression de chacun des réservoirs associés aux tapis de la couleur correspondante.
Sur toutes les marques X lumineuses, utilisez les séquences de blocs de code try / except et else afin de vérifier si la pression dans chaque réservoir est appropriée. Si la pression est inférieure à 100 ou supérieure à 300, élevez l'exception personnalisée PressureError en ajoutant la pression en argument. Si activée, elle déclenchera le code d'erreur et proposera une correction, sinon la clause else sera exécutée pour confirmer que la pression dans le réservoir est appropriée. Par exemple :
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" )
Faites cela sur toutes les marques X lumineuses, en utilisant les constantes variables correspondant à chaque tapis coloré et vérifiez ou ajustez les valves de pression selon les besoins.
Une fois cela terminé, rendez-vous à la marque X dorée et utilisez la fonction open() pour accéder à la réserve contenant le chauffe-eau. Une fois à l'intérieur, rendez-vous à la marque X dorée située dans la réserve et utilisez la fonction read() pour lire la note sur le comptoir. Cette note vous fournira des informations sur la température idéale pour chacun des chauffe-eau.
Une fois que vous aurez les informations concernant chacune des températures, rendez-vous à la marque X sombre sur le tapis violet. Ici, nous utiliserons la séquence de code try/except et else pour vérifier que les chauffe-eau sont à la bonne température. Il existe quatre (4) autres constantes variables associées aux tapis colorés : purple_temperature, yellow_temperature, pink_temperature et white_temperature.
Dans la séquence, nous vérifierons si la température est inférieure à 100. Si c'est le cas, nous élèverons l'exception TemperatureError. En tant qu'exception personnalisée, elle prend un argument. Dans ce cas, vous devez entrer la température indiquée dans la note afin d'exécuter correctement la contre-mesure de l'exception pour corriger le problème. Par exemple :
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" )
Faites cela pour tous les chauffe-eau. À chaque marque X, en faisant face aux chauffe-eau, exécutez la séquence en utilisant les constantes variables correspondant aux tapis de couleur appropriés afin de terminer le niveau.