begin / rescue
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 44 de 56.
Para evitar que uma exceção interrompa a execução do seu programa, envolva o código arriscado em begin ... rescue ... end. Se qualquer coisa dentro de begin lançar uma exceção, o Ruby pula para o bloco rescue correspondente em vez de abortar.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# Não é possível dividir por zero!Você pode capturar o próprio objeto de exceção com => e e ler seu .message:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Entrada inválida: valor inválido para Integer(): "hello"Se você não nomear uma classe de exceção, rescue sozinho captura StandardError e seus descendentes, a maioria das falhas do dia a dia. A captura é mais útil quando você pode fazer algo no bloco de rescue: substituir um valor padrão, registrar o problema ou perguntar novamente ao usuário.
Desafio
FácilLeia duas linhas da entrada, ambas devem ser inteiros, mas a segunda pode não ser um número válido.
Envolva o parsing da segunda linha em begin / rescue:
- Use
Integer(input)(que lançaArgumentErrorem uma string inválida) - Se o parsing for bem-sucedido, imprima
Sum: <a + b> - Se falhar, imprima
Bad number!
Para a entrada 3 depois 4, a saída é Sum: 7. Para 3 depois abc, é Bad number!.
Experimente você mesmo
a = gets.to_i
raw_b = gets.chomp
# TODO: begin/rescue em torno de Integer(raw_b); imprima a soma ou o texto exato das instruções
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