Este tutorial mostrará como implementar o manuseio de exceções em Ruby usando os blocos de aumento e resgate.
Uso básico
A maioria das linguagens de programação implementa o manuseio de exceções usando o bloco de tentativa e captura. No entanto, como tudo o mais em Ruby, as palavras -chave são mais descritivas.
Podemos expressar a sintaxe geral como mostrado abaixo:
começarAnexamos o bloco de manuseio de exceção em uma declaração de início e final. Dentro dessas declarações, definimos os blocos de aumento e resgate.
No aumento, definimos a exceção, que podemos criar manualmente ou fazer com que o intérprete de rubi o gere. Por padrão, o parâmetro para o bloco de aumento é o RuntimeError
Em seguida é o bloco de resgate. Como o nome sugere, esse bloco chega ao resgate quando ocorre uma exceção. Assume o controle da execução do programa.
Ruby comparará a exceção levantada do bloco Raise contra os parâmetros passados para o bloco de resgate. Se a exceção for do mesmo tipo ou superclasse, ela aciona o bloco de resgate.
Exemplo de manuseio de exceção em rubi
Podemos implementar um exemplo simples para ilustrar como o manuseio de exceções funciona em Ruby:
def err_meNo exemplo acima, definimos uma função com um bloco de exceção.
Aumentamos manualmente uma exceção, que interrompe o fluxo de execução do programa e entra no bloco de resgate. Isso executa as ações no bloco neste caso, uma declaração de put e saídas.
Se você adicionar qualquer bloco de código imediatamente após o aumento e antes do bloco de resgate, eles não executam porque o bloco de resgate lida imediatamente com o fluxo do programa.
Por padrão, o bloco de resgate usa o parâmetro StandardError. No entanto, existem outros tipos de erros em Ruby, incluindo.
E mais.
Para aumentar e lidar com um tipo de erro específico, podemos passá -lo para o bloco de aumento como um parâmetro. Aqui está um exemplo:
começarNo exemplo acima, criamos um zerodivisionError. Em seguida, entramos no bloco de resgate, que imprime o tipo de exceção específico e traça a fonte.
A saída resultante é:
$ Ruby Err Mandling.rbOutros blocos de exceção
Além do principal bloco de aumento e resgate, Ruby também nos fornece outros blocos que podemos implementar para lidar com erros.
Eles incluem:
Bloco de repetição
O bloco de repetição é usado para executar novamente o bloco de resgate depois de aumentar a exceção. Aqui está um exemplo:
começarSe executarmos o código acima, ele imprimirá a mensagem dentro do bloco de resgate. Ele encontrará o bloco de repetição, que pulará no bloco de resgate.
Um caso de uso comum de blocos de tentativa está investigando erros usando força bruta. Um exemplo seria continuar recarregando uma página quando a conexão estiver baixa até que o erro resolva.
CUIDADO: Tenha cuidado ao usar o bloco de repetição, porque é uma fonte comum de loops infinitos.
Garanta o bloco
Se você programou em outro idioma como o Python, provavelmente está familiarizado com o bloco finalmente. O bloco Garantir em Ruby tem um desempenho semelhante ao bloco finalmente em outras linguagens de programação.
O bloco Garantir sempre é executado no final do código. Independentemente de a exceção elevada ter sido tratada corretamente ou a execução do programa termina, ela sempre é executada ou executa.
Aqui está um exemplo:
começarNesse caso, o código acima imprimirá uma mensagem de exceção e finalmente executará o bloco Garantir.
ZerodivisisionError me fez morrer ⚰️Else bloco
Se nenhuma exceção for levantada, podemos implementar um bloco para fazer uma ação usando a instrução ELS.
Por exemplo:
começarO bloco else é colocado entre o resgate e garantir o bloco. No exemplo acima, você notará que está faltando um bloco de aumento, o que faz com que o bloco seja executado.
Aqui está um exemplo de saída:
Confiar meu, Eu corri com sucesso 😀
E eu sempre vou correr 🚀Manipulação de exceção leve
Os blocos de aumento e resgate são uma maneira útil de executar uma ação quando ocorre um erro. No entanto, como o manuseio de erros cria um rastreamento de pilha para ajudar na depuração, ele pode facilmente se tornar problemático em seu programa. É aqui que entram os blocos de captura e arremesso.
Para implementar um bloco de lanchonete, você começa definindo o rótulo usando a palavra-chave Catch. Depois que Ruby encontra um bloco de arremesso que faz referência ao bloco de captura, ele para a execução e pula para o bloco de captura.
Vamos usar um exemplo para ilustrar este conceito. Considere o ninho bagunçado mostrado no código abaixo:
Catch (: kill_me_now) fazerComeçamos usando a palavra -chave Catch e passamos a etiqueta dentro de um par de parênteses. Depois de executar o código, ele executará todos os loops aninhados e as declarações até que encontre a declaração de arremesso que referenciando a captura.
Isso encerrará imediatamente a execução e sairá de volta ao nível da declaração de captura.
Aqui está um exemplo de saída:
Após o arremesso, nada vai correr!'Conclusão
Este tutorial mostrou como implementar o tratamento de erros no Ruby usando os blocos de aumento e resgate.