Múltiplas Cláusulas rescue
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 45 de 56.
Um bloco begin pode ter várias cláusulas rescue. O Ruby verifica-as de cima para baixo e executa a primeira cuja classe de exceção corresponda.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endA ordem importa: liste as classes específicas antes das gerais. StandardError colocado primeiro absorveria tudo, e os ramos posteriores nunca seriam executados.
Você também pode capturar várias classes de exceção em um único ramo, listando-as separadas por vírgulas:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endUse isto quando o código de recuperação for o mesmo para vários modos de falha.
Desafio
FácilLeia duas linhas da entrada, ambas destinadas a ser inteiros. Use Integer(...) para ambas e, em seguida, divida a primeira pela segunda.
Trate três casos com ramificações rescue separadas:
ArgumentError→ imprimaBad number!ZeroDivisionError→ imprimaCannot divide by zero!TypeError→ imprimaWrong type!
Se tudo funcionar, imprima Result: <a / b> (divisão inteira).
Para a entrada 10 / 2, a saída é Result: 5. Para 10 / 0, Cannot divide by zero!. Para 10 / abc, Bad number!.
Experimente você mesmo
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um intervalo?Métodos de intervaloIntervalos em Case / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de Dados3Arrays 2D
Fundamentos de Arrays 2DAcessando elementos 2DPercorrendo Arrays 2DPadrões comuns em 2DRecapitulação - Operações com matrizes6Projeto - Gerenciador de Biblioteca
Visão Geral do ProjetoAdicionar Livro9Tratamento de Erros
O que é uma Exceção?begin / rescueMúltiplas Cláusulas rescueensure e raiseRecapitulação - Calculadora SeguraPratique por conta própria: Compilador de Ruby online