Tratamento de Erros em Python

Tratamento de Erros em Python

Neste artigo, explicaremos o tratamento de erros em Python.

YouTube Video

Tratamento de Erros em Python

O tratamento de erros em Python é feito principalmente utilizando as palavras-chave try, except, else e finally. Utilizar essas construções permite que você responda adequadamente quando um erro ocorre em seu programa. Abaixo, explicaremos como usar cada uma delas.

Bloco try

Dentro do bloco try, você escreve o código que deseja executar. Se um erro ocorrer dentro deste bloco, a execução do programa será imediatamente transferida para o bloco except.

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • Este código é um exemplo de como detectar erros em um bloco try e tratá-los adequadamente capturando tanto ValueError quanto ZeroDivisionError.

Bloco except

No bloco except, você escreve o código que será executado quando uma exceção (erro) específica ocorrer. Você também pode capturar exceções específicas dependendo do tipo de exceção que ocorre.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • Este código é um exemplo de como executar tratamentos diferentes para cada tipo de exceção no bloco except quando ocorre um erro no bloco try.

Tratando várias exceções juntas

Especifique uma tupla quando várias classes de exceção puderem compartilhar a mesma lógica de tratamento.

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • Este código é um exemplo de como capturar tanto IndexError quanto ZeroDivisionError juntos e tratar essas exceções da mesma forma.

Capturando exceções incondicionalmente

Omita o argumento para except se você quiser tratar todos os tipos de exceções em um único bloco.

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • No entanto, tratar exceções específicas em vez de capturar todas as exceções incondicionalmente é mais útil para encontrar bugs e fazer depuração. Sempre que possível, tratar explicitamente apenas as exceções previstas, como ValueError ou TypeError, aumentará a robustez do seu código.

Bloco else

O bloco else é executado apenas se nenhum erro ocorrer dentro do bloco try.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • Este código é um exemplo no qual o bloco else é executado apenas se nenhum erro ocorrer no bloco try.

Bloco finally

O bloco finally é usado para escrever código que será sempre executado no final, independentemente de um erro ter ocorrido no bloco try. É útil para liberar recursos ou realizar tarefas de limpeza.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • Este código é um exemplo que demonstra que o bloco finally é executado independentemente de ocorrer uma exceção ou não.

A palavra-chave raise

Também é possível gerar uma exceção usando a palavra-chave raise quando certas condições no código existente não são atendidas.

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • Este código é um exemplo de como levantar explicitamente uma exceção usando a palavra-chave raise quando uma condição não é atendida.

Conclusão

Ao tratar erros dessa maneira, você pode evitar falhas do programa, exibir mensagens apropriadas para o usuário e continuar com o processamento subsequente do programa.

Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.

YouTube Video