CodeGym /Cursos /Python SELF PT /Tratamento de Exceções

Tratamento de Exceções

Python SELF PT
Nível 17 , Lição 2
Disponível

3.1 Captura de Exceções

A gente não falaria tanto sobre exceções se só precisássemos observar elas. Exceções são objetos especiais que seu programa em Python pode trabalhar. O tratamento de exceções é um aspecto importante da programação que melhora a confiabilidade e a robustez dos programas.

Em Python, para capturar e tratar exceções a gente usa as construções try, except, else e finally. Essas construções permitem interceptar erros que ocorrem durante a execução do programa e tomar as ações apropriadas.

Construção try-except

A construção try-except é usada para capturar e tratar exceções. O bloco try contém o código que pode gerar uma exceção, e o bloco except contém o código que será executado se ocorrer uma exceção.

Exemplo:


try:
    result = 10 / 0
except ZeroDivisionError:
    print("Erro: divisão por zero.")

Se no código dentro do bloco try ocorrer a exceção ZeroDivisionError, ela será capturada pelo bloco except e o código com a chamada print() será executado.

Tratamento de múltiplas exceções

Você pode tratar vários tipos de exceções especificando-os em blocos separados except.


try:
    result = int("abc")
except ZeroDivisionError:
    print("Erro: divisão por zero.")
except ValueError:
    print("Erro: valor inválido.")

Captura de todas as exceções

Se você desejar capturar todas as exceções, pode usar o bloco except sem especificar um tipo de exceção específico. No entanto, isso não é recomendado, pois pode dificultar a depuração e esconder erros importantes.


try:
    result = 10 / 0
except:
    print("Ocorreu um erro.")

3.2 Operadores else e finally

Além dos operadores try e except, temos mais dois opcionais: else e finally. Agora vou explicar um pouco mais sobre eles.

Construção try-except-else

Bloco else é usado para executar código, caso não ocorra exceção no bloco try.


try:
    result = 10 / 2
except ZeroDivisionError:
    print("Erro: divisão por zero.")
else:
    print(f"Resultado: {result}")

Construção try-except-finally

Bloco finally contém código que será executado independentemente de ocorrer uma exceção ou não. Isso é útil para liberar recursos ou realizar operações de finalização.


try:
    result = 10 / 0
except ZeroDivisionError:
    print("Erro: divisão por zero.")
finally:
    print("Este bloco sempre é executado.")

Exemplo completo: try-except-else-finally

Exemplo:


try:
    result = 10 / 2
except ZeroDivisionError:
    print("Erro: divisão por zero.")
else:
    print(f"Resultado: {result}")
finally:
    print("Este bloco sempre é executado.")

3.3 Exemplo try-except-else-finally

Vamos analisar um exemplo real. Por exemplo, estamos tentando ler dados de um arquivo no disco — o que pode ser mais simples?


file = open("file.txt", "r")
content = file.read()
print(content)

O que pode dar errado? Por exemplo, tudo:

  • O arquivo pode não existir. Ele pode ter sido apagado acidentalmente, não gravado, ou seu programa está sendo executado em outro computador onde ele nunca existiu.
  • Erro de leitura do arquivo. Seu programa não tem acesso a ele, pois está em um diretório que requer permissões administrativas.
  • Outro programa está escrevendo neste arquivo agora e não pode ser lido — ele tem acesso exclusivo ao arquivo.

Parece suficiente? Então não esqueça que, independentemente da etapa em que ocorreu o erro ao trabalhar com o arquivo, você deve "fechar" ele para que o sistema operacional libere os recursos alocados para trabalhar com este arquivo.

Então, o código real ficará mais ou menos assim:


try:
    file = open("non_existent_file.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("Erro: arquivo não encontrado.")
except IOError:
    print("Erro: erro de entrada/saída.")
else:
    print(content)
finally:
    if 'file' in locals() and not file.closed:
        file.close()
        print("Arquivo fechado.")

Bem-vindo ao mundo real, onde você precisa escrever código não apenas para o "cenário de trabalho", mas também para todos os cenários possíveis que podem dar errado.

Não se assuste — é mais simples do que parece. Basta entender o que são condições de contorno (corner cases) e adicionar verificações de erros padrão na hora certa. O resto, as frameworks modernas fazem por você.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION