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, ina = 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, inraise 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
0 comentários:
Postar um comentário