Exceções

Exceções em Python são eventos que ocorrem durante a execução de um programa e que interrompem seu fluxo normal quando erros ou condições inesperadas são encontrados. Elas são uma forma estruturada de lidar com erros, fornecendo ferramentas para capturá-los e tratá-los de maneira controlada. Todas as exceções em Python derivam de BaseException, sendo Exception a subclasse mais usada.

Exceções mais comuns:

Exceção Descrição
ZeroDivisionError Divisão por zero.
ValueError Valor inválido.
TypeError Operação realizada em tipos incompatíveis.
IndexError Índice fora do intervalo.
KeyError Chave inexistente em um dicionário.
FileNotFoundError Arquivo ou diretório não encontrado.
ImportError Módulo não pode ser importado.

Dica: coloque o menor número de linhas possível no try para saber melhor qual tipo de erro poderá tratar. 

Obs.: Cada bloco try pode tratar quantas exceções forem necessárias.

excecoes.py
# Tenta converter a entrada para um número inteiro
try:
    x = int(input("Digite um número: "))

# Caso ocorra um erro de valor
except ValueError:
    print("Você não digitou um número válido.")

# O else em uma exceção é executado quando não da erro
else:
    print("Você digitou um número válido.") 

# Finally Sempre será executada
finally:
    print("Esta linha sempre será executada.")


lista = [1, 2, 3]
try:
    total = lista + 2
except Exception as e:
    # Mostra o erro que ocorreu
    print(f"Ocorreu um erro: {e}")

Raise

O comando raise em Python é usado para lançar uma exceção. Quando usado, ele interrompe a execução normal do programa e transfere o controle para o manipulador de exceções mais próximo. É útil para sinalizar erros ou condições inesperadas no código.

raise.py
def divide(a, b):
    if b == 0:
        # Pausa a execução e Lança uma exceção do tipo ValueError
        raise ValueError("O divisor não pode ser zero.")
    return a / b

try:
    resultado = divide(10, 0)

# Captura a exceção lançada e imprime a personalização do resultado
except ValueError as e:
    print(f"Erro: {e}")

O nome do tipo de erro não importa(ValueErro nesse caso), serve apenas para organizar melhor.