Em diversas situações, podem ocorrer erros ou exceções no Python. Veja alguns exemplos a seguir:
In [ ]:
print(4/0) # division by zero
In [ ]:
float("quatro ponto seis") # ValueError: could not convert string to float
Em alguns casos, o programador pode prever tais erros e evitá-los.
Entretanto, existem certos casos que é difícil ou até mesmo impossível prever se haverá um erro ou exceção.
Veja o exemplo abaixo:
In [ ]:
x = float(input("Digite um número:"))
print(1/x)
No caso anterior, caso o usuário digite o valor zero ou um texto não numérico (ex.: "aula"), ocasionará um erro. O programador não pode evitar tal situação.
Neste caso, é interessante fazer um tratamento de erros utilizando os comandos try
e except
.
Veja o exemplo anterior, mas com tratamento de erro:
In [40]:
try:
x = float(input("Digite um número:"))
print(1/x)
except ValueError:
print ("Número inválido.")
except ZeroDivisionError:
print ("O valor de x não pode ser zero.")
except:
print ("Erro desconhecido.")
finally:
print ("Fim do programa")
No exemplo anterior, o código dentro do escopo try
será executado.
Caso houver algum erro ou exceção no escopo do try
, será tratado dentro dos respectivos escopos except
:
except ValueError:
será impresso "Número inválido.". Este erro ocorre quando o usuário digita algo não numérico.except ZeroDivisionError:
será impresso "O valor de x não pode ser zero.". Este erro ocorre quando o usuário digita "0".except:
se houver alguma outra exceção diferente das anteriores, será executado o código dentro deste escopo. Neste caso, será impresso "Erro desconhecido.".O bloco finally
é uma condição que sempre será executado, não importa se houve ou não erro ou exceção. Este bloco é opcional, mas muito útil em muitos casos.
Em alguns casos, o programador pode querer forçar uma exceção.
Nesta hipóstese, ao chamar o comando raise
, será enviada uma exceção.
Veja o exemplo a seguir:
In [41]:
senha = input("Digite a senha de acesso: ")
try:
if senha != "123":
raise
print("Senha correta!")
except:
print("Senha incorreta!")
No exemplo anterior, caso o usuário digite a senha incorreta (no exemplo, "123"), ocorrerá uma exeção.
Também é possível especificar o tipo de exceção. Veja o mesmo exemplo anterior, só que mais elaborado:
In [42]:
try:
try:
senha = int(input("Digite a senha de acesso: "))
except ValueError:
raise Exception('Senha não numérica.')
if senha != 123:
raise Exception("Senha incorreta.")
except Exception as e:
print(e)
No exemplo anterior, não apenas foi exemplificado a possibilidade de utilizarmos dois try
aninhados (um dentro do outro), mas também que podemos inserir descrições sobre uma exceção gerada pelo comando raise
.
Aprenda mais sobre exceções em Exceções em Python.