O erro em Python pode ser de dois tipos, ou seja, erros de sintaxe e exceções. Erros são os problemas em um programa devido aos quais o programa interromperá a execução. Por outro lado, exceções são levantadas quando ocorrem alguns eventos internos que alteram o fluxo normal do programa.
A diferença entre erro de sintaxe e exceções
Erro de sintaxe: como o nome sugere, esse erro é causado por sintaxe incorreta no código. Isso leva ao encerramento do programa.
Exemplo
# inicializar a variável de quantidade
montante = 10000
# verifique se você está qualificado para
# Comprar Dsa no seu próprio ritmo ou não
if (montante > 2999)
print("Você está qualificado para comprar Dsa no seu próprio ritmo")
Resultado:
File "/home/thor/Documentos/teste.py", line 6
if (montante > 2999)
^
SyntaxError: invalid syntax
Exceções: as exceções são levantadas quando o programa está sintaticamente correto, mas o código resultou em um erro. Este erro não interrompe a execução do programa, porém altera o fluxo normal do programa.
Exemplo:
# inicializa a variável
marks = 10000
# tenta fazer uma divisão por zero
a = marks / 0
print(a)
Resultado:
Traceback (most recent call last):
File "/home/thor/Documentos/teste.py", line 5, in
a = marks / 0
ZeroDivisionError: division by zero
No exemplo acima, levantou ZeroDivisionError
, pois estamos tentando dividir um número por 0.
Nota: Exception
é a classe base para todas as exceções em Python. Você pode verificar a hierarquia de exceções aqui.
try e except no tratamento de exceções
Vamos tentar acessar o elemento da matriz cujo índice está fora do limite e tratar a exceção correspondente.
# Programa python para mostrar como
# lidar com erros em tempo de execução
a = [1, 2, 3]
try:
print("Segundo elemento = %d" %(a[1]))
# Lança o erro IndexError porque
# estamos tentando acessar um
# elemento fora dos limites
print("Quarto elemento = %d" %(a[3]))
except IndexError:
print('O erro IndexError foi lançado')
Resultado:
Segundo elemento = 2
O erro IndexError foi lançado
Uma instrução try
pode ter mais de uma cláusula except
, para especificar manipuladores para diferentes exceções. Observe que no máximo um manipulador será executado.
# Programa para lidar com vários erros com uma instrução except
try :
a = 3
if a < 4 :
# lança ZeroDivisionError para a = 3
b = a / (a-3)
# lança NameError se a >= 4
print(f"Valor de b = {b}")
# note que parenteses é necessário
# quando vamos lidar com mais de uma
# exceção
except(ZeroDivisionError, NameError):
print("Complicações surgirão, continuaram e foram superadas")
Resultado:
Complicações surgirão, continuaram e foram superadas
Se você alterar o valor de 'a
' para maior ou igual a 4, a saída será:
Complicações surgirão, continuaram e foram superadas
A saída acima é assim porque assim que o python tenta acessar o valor de b
, ocorre NameError
.
Cláusula Else
Em python, você também pode usar a cláusula else
no bloco try-except
, que deve estar presente após todas as cláusulas except
. O código entra no bloco else
apenas se a cláusula try
não gerar uma exceção.
# Programa para representar a cláusula else com try-except
# Função que retorna a / b
def AbyB(a , b):
try:
c = ((a+b) / (a-b))
except ZeroDivisionError:
print("a/b resulta em 0")
else:
print(c)
AbyB(2.0, 3.0)
AbyB(3.0, 3.0)
A saída para o programa acima é:
-5.0
a/b resulta em 0
Palavra-chave finally em Python
Python fornece a palavra-chave finally
, que sempre é executada após blocos try
e except
. O bloco finally
sempre executa após o término normal do bloco try
ou depois que o bloco try
termina devido a alguma exceção.
Sintaxe:
try:
# Algum código....
except:
# bloco opcional
# lidando com a exceção
else:
# executa se não tiver nenhuma exceção
finally:
# sempre é executado, com ou sem exceções
Exemplo:
# demonstração de finally
try:
k = 5//0 # lança o erro de divisão por zero
print(k)
# lida com o erro de divisão por zero
except ZeroDivisionError:
print("Não é possivel dividir por zero")
finally:
# Esse bloco sempre é executado
# com ou sem exceções
print('Isso é sempre executado')
Resultado:
Não é possivel dividir por zero
Isso é sempre executado
Levantando exceções
A instrução raise
permite que o programador force a ocorrência de uma exceção específica. O único argumento em aumento indica a exceção a ser levantada. Deve ser uma instância de Exception
ou a classe exception
(uma classe que deriva de Exception
).
# Programa python demonstrando
# o uso de raise
try:
raise NameError("Um erro!!!") # lança um erro
except NameError:
print("Uma exceção")
raise # Para determinar qual exceção ocorreu ou não
A saída do código acima será simplesmente impressa na linha "Umerro", mas um erro de tempo de execução também ocorrerá na última devido a instrução raise
na última linha. Portanto, a saída em sua linha de comando será semelhante a essa:
Uma exceção
Traceback (most recent call last):
File "/home/thor/Documentos/teste.py", line 5, in
raise NameError("Um erro!!!") # lança um erro
NameError: Um erro!!!
Artigo escrito por Nikhil Kumar Singh (nickzuck_007) e melhorado por Akanksha_Rai, nikhilaggarwal3 e traduzido por Acervo Lima de Python Exception Handling