Sitemap

Tratamento de exceções em Python

4 min readJul 15, 2020

No artigo anterior desenvolvemos do zero uma calculadora em python. Neste, faremos o tratamento das exceções.

De acordo com a documentação do python, existem pelo menos dois tipos distintos de erros: erros de sintaxe e exceções.

Erros de Sintaxe:

Erros de sintaxe são aqueles que cometemos ao escrever nosso código, como por exemplo, quando esquecemos de colocar dois pontos ( : ) após a definição de uma função, veja o código abaixo:

def addition(x, y)
return x + y

Ao executarmos o programa desta forma, teremos o seguinte erro:

File "calculator_v2.py", line 4
def addition(x, y)
^
SyntaxError: invalid syntax

Conforme descrito na documentação, o parser repete a linha inválida e apresenta uma pequena ‘seta’ apontando para o ponto da linha em que o erro foi detectado. O erro é causado (ou ao menos detectado) pelo símbolo que precede a seta.

No exemplo, o erro foi detectado na função addition(), uma vez que um dois pontos ( : ) está faltando antes dela. O nome de arquivo e número de linha são exibidos para que você possa rastrear o erro no texto do script.

Exceções:

As exceções são os erros que acontecem mesmo que um comando ou expressão estejam sintaticamente corretos, ou seja, uma exceção é um erro que ocorre durante a execução do programa mas que não é fatal, um exemplo é uma regra que não foi definida. No caso da calculadora, uma exceção acontece quanto tentamos dividir um número por zero.

Traceback (most recent call last):
File "calculator_v2.py", line 17, in division
return x // y
ZeroDivisionError: integer division or modulo by zero

A documentação diz que a última linha da mensagem de erro indica o que aconteceu. Exceções surgem com diferentes tipos, e o tipo é exibido como parte da mensagem: o tipo no exemplo é ZeroDivisionError. A string exibida como sendo o tipo da exceção é o nome da exceção embutida que ocorreu.

O resto da linha é um detalhamento que depende do tipo da exceção ocorrida e sua causa.

A parte anterior da mensagem de erro apresenta o contexto onde ocorreu a exceção. Essa informação é denominada stack traceback (situação da pilha de execução). Em geral, contém uma lista de linhas do código-fonte, sem apresentar, no entanto, linhas lidas da entrada padrão.

Você pode saber mais sobre as exceções embutidas na linguagem Python consultando a documentação neste link.

Tratando as exceções da calculadora

Nossa calculadora tem duas principais exceções que trataremos neste artigo, a primeira é a “ZeroDivisionError” e a segunda “ValueError”.

O Python oferece as instruções try, except e finally para nos ajudar a lidar com os erros. Porém, na calculadora, utilizaremos apenas a construção try … except, em ambas as exceções.

ZeroDivisionError:

Como visto anteriormente, a exceção “ZeroDivisionError” ocorre quando tentamos dividir um número inteiro por zero:

Teremos o erro:

Traceback (most recent call last):
File "calculator_v2.py", line 17, in division
return x // y
ZeroDivisionError: integer division or modulo by zero

Primeiramente, vamos garantir que quando o usuário tentar fazer a divisão por zero, nossa função exiba a mensagem “Oops! Não é possível dividir por 0.”.

Para que essa mensagem seja exibida, dentro da instrução try, colocaremos o retorno que esperamos, ou seja, esperamos que nossa função consiga fazer a divisão com sucesso.

Em sequência, dentro da instrução except, colocaremos nossa mensagem para que em tempo de execução, se a função division() identificar que o divisor é 0, ela substitua a mensagem padrão da linguagem pela mensagem que queremos exibir.

E por fim, diremos para o programa finalizar a execução usando a função exit(). Essa é somente uma forma de trabalharmos com try except.

O código ficará assim:

def division(x, y):
try:
return x / y
except ZeroDivisionError:
print("\nOops! Não é possível dividir por 0.")
exit(0)

Assim, teremos:

Press enter or click to view image in full size

ValueError:

A exceção “ValueError” acontece quando uma operação ou função recebe um argumento que tem o tipo certo, mas um valor inadequado, e a situação não é descrita por uma exceção mais precisa.

Um exemplo deste erro na calculadora é quando no input da opção desejada, o usuário digita uma letra ao invés de um número, neste caso, o erro acontece na conversão de string para int.

option = int(input("\nDigite sua opção (1/2/3/4): "))

Ao digitar um “x” no campo “Digite sua opção (1/2/3/4)”, teremos o erro:

Traceback (most recent call last):
File "calculator_v2.py", line 35, in <module>
option = int(input("\nDigite sua opção (1/2/3/4): "))
ValueError: invalid literal for int() with base 10: 'x'

Para forçar o usuário a inserir um número e não uma string, colocaremos a construção try…except dentro de um loop while. Ou seja, enquanto o usuário não digitar um número, exibiremos a mensagem “Oops! Não é uma opção válida. Tente novamente”

while True:
try:
option = int(input("\nDigite sua opção (1/2/3/4): "))
break

except ValueError:
print("\nOops! Não é uma opção válida. Tente novamente")

Pronto! Temos o resultado que queríamos:

Press enter or click to view image in full size

Agora nossa calculadora está melhor. Caso queira praticar mais, existem outros tratamentos de erros que podemos fazer nesse mesmo programa!

Até mais! :)

--

--

No responses yet