Coding for KidsCoding for Kids
Níveis CriativosDesafiosGuia do Professor
Votar em funcionalidades
Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível

Tratamento de Exceções
Personalizando Classes de Exceção

Objetivo

Verifique a água da chuva coletada e assegure que ela está sendo processada e transferida corretamente personalizando classes de exceção.

No extremo oposto do complexo do telhado, há uma cisterna de água da chuva coletada; essa água é filtrada e transferida para todo o edifício para diversos fins. Algumas válvulas na parede superior controlam a pressão da água que flui, enquanto a última despensa abriga vários aquecedores de água. Operar a maquinaria pode ser complicado, porém sua operação pode ser otimizada efetivamente delineando códigos de erro e estabelecendo contramedidas eficazes. Isso é alcançado personalizando classes de exceção que você cria para suas exceções personalizadas.

Existem duas classes de exceção personalizadas configuradas no editor de código; sua capacidade de usá-las será essencial para solucionar quaisquer problemas de maquinaria que você encontrar. A primeira é uma exceção para diagnosticar a pressão da água. Ela é destinada a ser usada com as válvulas para garantir que a água flua corretamente para o complexo ou se a pressão precisa ser ajustada. Dependendo se a pressão estiver abaixo de 100 ou acima de 300, uma ação diferente é tomada pela exceção; a pressão é um argumento que o usuário deve fornecer. Uma vez acionada, um pop-up personalizado contendo um código de erro e uma mensagem é exibido.

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")

A segunda classe de exceção personalizada destina-se a modular a temperatura nos aquecedores de água; se a temperatura estiver muito baixa ou muito alta, você deve inserir uma nova temperatura como argumento a fim de corrigir o erro assim que ele ocorrer.

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")

Para começar, caminhe até a marca X leve sobre o tapete verde e enfrente o tanque com uma válvula; há quatro (4) destes regulando a pressão da água sendo bombeada da cisterna. Existem quatro (4) constantes variáveis: green_pressure, red_pressure, blue_pressure e orange_pressure; elas armazenam a pressão de cada um dos tanques dos tapetes correspondentes às cores.

Em todas as marcas X leves, use as sequências de blocos de código try/except e else para verificar se a pressão em cada tanque está adequada. Se a pressão estiver abaixo de 100 ou acima de 300, levante a exceção personalizada PressureError e adicione a pressão como argumento. Se ativada, ela levantará o código de erro e emitirá uma correção; caso contrário, a cláusula else é acionada confirmando que a pressão no tanque está adequada. Por exemplo:

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" )

Faça isso em todas as marcas X leves, usando as constantes variáveis que correspondem a cada um dos tapetes coloridos e, dependendo, verifique ou ajuste as válvulas de pressão conforme necessário.

Depois, caminhe até a marca X dourada e use a função open() para acessar a despensa com o aquecedor de água; uma vez dentro, caminhe até a marca X dourada que se encontra no interior da despensa e use a função read() para ler o memorando no balcão. Esse memorando fornecerá informações sobre qual é a temperatura ideal para cada um dos aquecedores de água.

Depois de obter as informações sobre cada uma das temperaturas, dirija-se à marca X escura sobre o tapete roxo; aqui, usaremos a sequência de código try/except e else para verificar se os aquecedores de água estão na temperatura correta. Existem mais quatro (4) constantes variáveis associadas aos tapetes coloridos: purple_temperature, yellow_temperature, pink_temperature e white_temperature.

Na sequência, verificaremos se a temperatura está abaixo de 100; se estiver, levantaremos a exceção TemperatureError. Como uma exceção personalizada, ela aceita um argumento; neste caso, você deve inserir a temperatura lida no memorando para executar corretamente a contramedida da exceção e corrigir o problema. Por exemplo:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )

Faça isso para todos os aquecedores de água; em cada marca X, enquanto estiver de frente para os aquecedores, execute a sequência usando as constantes variáveis correspondentes aos tapetes coloridos corretos para completar o nível.

Livro de Código