Paulo Queiroz

Erros, rapidinho

Neste post, vamos dar uma olhada rápida em como criar e lidar com erros. Usaremos Python nos exemplos, mas o mesmo conceito existe em várias linguagens.

O que é um erro?

Essa pode parecer uma pergunta boba, mas em programação, um erro pode não ser a mesma coisa que o significado conversacional da palavra.

Se você já escreveu um código como este, você poderia ter levantado um erro:

a = int(input("Digite um número: "))
b = int(input("Digite outro número: "))

if b == 0:
    print("Você não pode dividir por zero!")
else:
    print(f"{a} / {b} = {a / b}")

Neste exemplo, estamos verificando se o segundo número é zero antes de fazer a divisão, mas em vez de levantar um erro, estamos imprimindo uma mensagem. Esta é uma prática comum, mas não é a única maneira de lidar com erros.

Levantando um erro

Em Python, você pode levantar um erro usando o raise. Aqui está um exemplo:

def divide(a, b):
    if b == 0:
        raise ValueError("Você não pode dividir por zero!")
    return a / b

a = int(input("Digite um número: "))
b = int(input("Digite outro número: "))

divide(a, b)

Neste exemplo, se o usuário inserir zero como o segundo número, a função irá levantar um erro. Isso irá parar a execução do programa onde ele está, imprimir um erro, e sair. Nada depois da linha onde o erro foi levantado será executado.

Lidando com erros

Não precisamos deixar o programa crashar quando qualquer erro é levantado. Na verdade, na maioria das vezes devemos lidar com os erros. É assim que podemos fazer isso:

def divide(a, b):
    if b == 0:
        raise ValueError("Você não pode dividir por zero!")
    return a / b

a = int(input("Digite um número: "))
b = int(input("Digite outro número: "))

try:
    result = divide(a, b)
    print(f"{a} / {b} = {result}")
except ValueError as e:
    print("Ocorreu um erro: ", e)

Neste exemplo o programa não irá crashar. Em vez disso, após o erro ser levantado, a instrução return (ou qualquer coisa que poderia ter vindo após a linha onde o erro foi levantado) não será executada. O programa irá pular para o bloco except e continuar a execução a partir dali.

Este exemplo é bobo, já que Python já irá levantar um erro se você tentar dividir por zero. Mas ele serve para ilustrar o conceito.

Conclusão

Erros são um conceito presente em várias linguagens. Eles são uma maneira de parar a execução de um programa quando algo inesperado acontece. Podemos levantar erros nós mesmos, ou podemos deixar a linguagem levantá-los para nós. Também podemos lidar com erros, para que o programa não crashe quando eles acontecem.

No próximo post, vamos dar uma olhada em por que algumas pessoas dizem que erros/exceções são um conceito ruim e quais são as alternativas.