O que é uma Exceção?
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 43 de 56.
Quando algo dá errado em tempo de execução, como dividir por zero, analisar "abc" como um número inteiro ou chamar um método em nil: o Ruby lança uma exceção. O programa para, e o Ruby imprime o que aconteceu junto com onde aconteceu.
10 / 0
# ZeroDivisionError: dividido por 0Cada tipo de falha é sua própria classe. Algumas comuns:
ZeroDivisionError: dividir um número inteiro por zeroArgumentError: argumentos incorretos passados para um método (Integer("abc"))
NoMethodError: chamar um método que o receptor não possui (nil.upcase)TypeError: operação em um tipo incorreto de objeto ("a" + 1)
Toda classe de exceção possui um .message: a descrição legível por humanos que o Ruby imprime quando a exceção não é tratada. As próximas lições mostram como capturar essas exceções para que seu programa continue em execução.
Desafio
InicianteLeia uma única linha de entrada, o nome de uma única expressão Ruby. Imprima o nome da classe de exceção que o Ruby lançaria para ela. Use uma instrução case (não é necessário lançar a exceção de verdade):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- qualquer outra coisa →
Unknown
Para a entrada nil-method, a saída é NoMethodError.
Folha de consulta
Quando algo dá errado em tempo de execução, o Ruby lança uma exceção e o programa para. Classes de exceção comuns:
ZeroDivisionError: dividir um inteiro por zeroArgumentError: argumentos incorretos (ex:Integer("abc"))NoMethodError: chamar um método que o receptor não possui (ex:nil.upcase)TypeError: operação no tipo errado de objeto (ex:"a" + 1)
10 / 0
# ZeroDivisionError: dividido por 0Todo objeto de exceção possui um .message com uma descrição legível por humanos.
Experimente você mesmo
kind = gets.chomp
# TODO: case kind ... imprima o nome da classe de exceção correspondente
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 a Fundo
Visão Geral de Métodos de StringInterpolação de StringsIterando sobre StringsSplit e JoinRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA palavra-chave yieldParâmetros de BlocoProcs e LambdasRecapitulação - Iterador Customizado7Hashes Parte 2
Hash.new com Valores PadrãoIterando em 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 / WhenRecapitulação - Prática com Intervalos5O Poder do Enumerable
Select e RejectEncadeando o MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Data Pipeline3Arrays 2D
Fundamentos de Arrays 2DAcessando Elementos 2DIterando sobre Arrays 2DPadrões 2D ComunsRecapitulaçã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 Segura