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 tantoValueError
quantoZeroDivisionError
.
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 blocotry
.
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
quantoZeroDivisionError
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
ouTypeError
, 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 blocotry
.
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.