Error
Há grande sabedoria em esperar pelo inesperado também.
Subtipos padrão
Enquanto alguns erros genéricos, como problemas de sintaxe, importações inválidas, etc. são gerados com o tipo base Error, outros são subtipados:
- KeyError: a chave (nome) não é encontrada no escopo
- IndexError: o índice está fora dos limites da lista/texto
- CallError: uma chamada é feita com argumentos insuficientes
- TypeError: inconsistência de tipo em chamada, retorno ou atribuição de método
- AssignError: atribuindo um novo valor a uma entrada imutável
- ValueError: tipo pode estar correto, mas conteúdo não é aceito
Comparações
Erros sempre avaliam como falso:
Error() ? 'é verdadeiro' : 'é falso' # é falso
Erros são comparáveis ao seu tipo:
Error() == Error # verdadeiro
leia também a sintaxe de comparação de tipo
Uma maneira ingênua de lidar com erros poderia ser:
_ <- fat.console
# lidando com o erro retornado
maybeFail() <= Error => log('um erro aconteceu')
_ => log('sucesso')
isso só funciona se a opção
-e / continuar em caso de erro
estiver definida
Embora a abordagem ingênua possa funcionar, é difícil saber onde os erros surgirão. Portanto, uma maneira mais adequada de lidar com erros é definindo um manipulador de erro usando o método trapWith
encontrado na biblioteca failure.