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
Exceções Personalizadas

Objetivo

Use exceções personalizadas para coletar mensagens com pedidos de produtos e enviá-las via pombo-correio.

Algumas mensagens são distribuídas pela fazenda e outras estações via pombo-correio, e seria uma boa ideia enviar algumas para ficar à frente do cronograma. Temos capturado erros usando exceções comuns, mas às vezes pode ser vantajoso criar suas próprias exceções personalizadas para cenários muito específicos. Vamos buscar as mensagens e selecionar os pombos identificando os itens corretos usando nossas próprias exceções personalizadas.

As exceções personalizadas são criadas ao definir classes; adicionando a cláusula (Exception) você pode reaproveitar uma classe para executar exceções. Para nossos propósitos, criaremos duas: InvalidLocation, que é acionada quando uma determinada string não passa na verificação, e UnsuitableSelection, que é usada para verificar se um número ultrapassa um certo limiar.

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

Agora que as classes estão configuradas, é hora de adquirir os memorandos para que possam ser enviados. Crie uma lista chamada prep a fim de armazenar e combinar os componentes necessários para a troca que se aproxima. Caminhe até a marca de X escura sobre o tapete vermelho; na fileira de mesas com marcas de X na frente, estaremos buscando memorandos que têm pedidos destinados ao setor "west" da fazenda.

Existem quatro constantes variáveis usadas neste segmento: red_memo, blue_memo, green_memo e orange_memo. Apenas os memorandos marcados para ser entregues no setor "west" devem ser coletados para que possam ser enviados. Para determinar se pegamos o memorando ou não, usaremos os blocos de código try/except e else em conjunto com a exceção personalizada InvalidLocation. Para usar a exceção personalizada, faça com que o bloco try verifique se o memorando está etiquetado como "west" e, caso não esteja, levante a exceção. O bloco except confirma que o memorando é inválido e o bloco else coleta e adiciona à lista prep o memorando se ele for realmente destinado ao setor "west". Por exemplo:

try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)

Caminhe até cada uma das marcas de X escuras sobre os tapetes coloridos em frente às mesas e execute a sequência de exceção usando as constantes variáveis apropriadas correspondentes a cada cor.

Depois de coletar os memorandos, caminhe até a marca de X dourada em frente à porta e use a função open() para acessar os pombais. Uma vez dentro, caminhe até a marca de X clara, vire-se, use a função close() para fechar a porta e garantir que nenhum pombo escape.

Caminhe até a marca de X escura sobre o tapete roxo; nos pombais estaremos verificando se o pombo é velho o suficiente para entregar uma mensagem ou se é um filhote incapaz de fazer uma entrega. Existem mais quatro constantes variáveis a serem usadas neste segmento: purple_pen, yellow_pen, white_pen e pink_pen correspondendo a cada tapete colorido. Usaremos a mesma técnica que para os memorandos, utilizando a segunda classe que foi configurada.

Use os blocos de código try/except e else com a exceção personalizada UnsuitableSelection para identificar se o pombo é velho o suficiente para fazer a entrega. O bloco try verifica se a constante variável que representa o pombal possui um pombo adequado, checando se o pássaro tem menos de dois (2) anos. Se o pombo for inadequado, o bloco except é acionado; caso contrário, o bloco else é ativado, permitindo adicionar um pombo à lista prep para que a mensagem seja entregue.

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

Vá até cada marca de X escura sobre os tapetes coloridos e utilize essa sequência com a constante variável correta correspondente ao tapete de cor correta. Depois de coletar os pombos e as mensagens, caminhe até a marca de X dourada no final e use a função place() com a lista prep que você criou para enviar os pombos entregarem as mensagens e completar o nível.

Livro de Código