Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel
Manejo de Excepciones
Personalizando Clases de Excepción
Objetivo
Verifica el agua de lluvia recogida y asegúrate de que se esté procesando y transfiriendo correctamente personalizando clases de excepción.
Al final del complejo de techos se encuentra una cisterna de agua de lluvia recogida, esta agua es filtrada y transferida a lo largo del edificio para diversos fines. Algunas válvulas en la pared superior controlan la presión del agua en flujo, mientras que el último almacén alberga varios calentadores de agua. Operar la maquinaria puede ser complicado, sin embargo, su funcionamiento se puede optimizar eficazmente delineando códigos de error y estableciendo contramedidas efectivas. Esto se logra personalizando clases de excepción que creas para tus excepciones personalizadas.
En el editor de código se han configurado dos clases de excepción personalizadas, tu habilidad para usarlas será esencial para solucionar cualquier problema de maquinaria que encuentres. La primera es una excepción para solucionar problemas de presión de agua. Está destinada a usarse con las válvulas para asegurar que el agua fluya correctamente hacia el complejo o si es necesario ajustar la presión. Dependiendo de si la presión está por debajo de 100 o supera 300, se toma una acción diferente en la excepción; la presión es un argumento que el usuario debe proporcionar. Una vez activada, se mostrará una ventana emergente personalizada con un código de error y un mensaje.
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 segunda clase de excepción personalizada está destinada a modular la temperatura en los calentadores de agua. Si la temperatura es demasiado baja o demasiado alta, debes ingresar una nueva temperatura como argumento para corregir el error una vez que ocurra.
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")
Para comenzar, camina hasta la marca X luminosa sobre la alfombra verde y enfrenta el tanque con una válvula; hay cuatro (4) de estos que regulan la presión del agua que se bombea desde la cisterna. Hay cuatro (4) constantes de variable: green_pressure, red_pressure, blue_pressure y orange_pressure, las cuales contienen la presión de cada uno de los tanques de las alfombras de colores correspondientes.
En todas las marcas X luminosas, utiliza las secuencias de bloques de código try/except y else para verificar si la presión en cada tanque es adecuada. Si la presión está por debajo de 100 o por encima de 300, lanza la excepción personalizada PressureError y añade la presión como argumento. Si se activa, se mostrará el código de error y se emitirá una corrección; de lo contrario, se activa la cláusula else confirmando que la presión en el tanque es adecuada. Por ejemplo:
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" )
Haz esto en todas las marcas X luminosas, utilizando las constantes de variable que corresponden a cada una de las alfombras de colores y verifica o ajusta las válvulas de presión según sea necesario.
Una vez terminado, camina hasta la marca X dorada y utiliza la función open() para acceder al almacén con el calentador de agua; una vez dentro, camina hasta la marca X dorada que se encuentra dentro del almacén y utiliza la función read() para leer el memorando en el mostrador. Este memorando te proporcionará información sobre cuál es la temperatura ideal para cada uno de los calentadores de agua.
Una vez que tengas la información sobre cada una de las temperaturas, dirígete a la marca X oscura sobre la alfombra morada; aquí utilizaremos la secuencia de código try/except y else para verificar que los calentadores de agua estén a la temperatura correcta. Hay cuatro (4) constantes de variable adicionales asociadas con las alfombras de colores: purple_temperature, yellow_temperature, pink_temperature y white_temperature.
En la secuencia, verificaremos si la temperatura está por debajo de 100; si es así, lanzaremos la excepción TemperatureError. Como una excepción personalizada, esta toma un argumento; en este caso, debes ingresar la temperatura leída en el memorando para ejecutar correctamente la contramedida de la excepción y corregir el problema. Por ejemplo:
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" )
Haz esto para todos los calentadores de agua; en cada marca X, mientras te enfrentas a los calentadores, ejecuta la secuencia utilizando las constantes de variable que corresponden a las alfombras de colores correctas para completar el nivel.