Baixe Programando em Python - Excecoes e outras Notas de estudo em PDF para Informática, somente na Docsity!
Claudio Esperança
Python:
Exceções, Iteradores e Geradores
Exceções
Quando um programa encontra dificuldades não
previstas, diz-se que uma condição excepcional ou uma
exceção ocorreu
Um erro é uma exceção mas nem toda exceção é um erro
Para poder representar tais eventos, Python define os
chamados objetos de exceção ( exception objects )
Se a condição excepcional não é prevista (e tratada), o
programa termina com uma mensagem de rastreamento:
Traceback (most recent call last): File "<pyshell#0>", line 1, in -toplevel- 1/ ZeroDivisionError: integer division or modulo by zero
Avisos
Existem condições excepcionais menos sérias que não
provocam o levantamento de um objeto de exceção, mas
apenas são exibidas sob a forma de um aviso
Por exemplo,
import regex
Warning (from warnings module): File "main", line 1 DeprecationWarning: the regex module is deprecated; please use the re module Neste caso, o intepretador nos sinaliza que o módulo regex é antigo e que foi substituido por outro mais atualizado chamado re
O programa não falha, mas o programador fica ciente que provamelmente deve reescrever seu programa usando o módulo re para evitar obsolecência
O comando raise
Para sinalizar a ocorrência de uma condição excepcional,
pode-se usar o comando raise que tem uma das formas:
raise classe
raise classe , mensagem
raise classe ( mensagem )
Onde classe é uma das classes de exceção definidas
pelo Python
Para saber todos os tipos de exceção consulte o manual
Se quiser uma classe genérica use a classe Exception
Uma listagem pode ser obtida escrevendo
import exceptions dir(exceptions) ['ArithmeticError', 'AssertionError', 'AttributeError', ...
Algumas Classes de Exceção
Criando uma Classe de Exceção
Basta criar uma classe da forma habitual derivando-a da
classe Exception
Não é preciso redefinir qualquer método
Ex.:
>>> class MinhaExcecao(Exception): pass
>>> raise MinhaExcecao("Deu bode!")
Traceback (most recent call last):
File "<pyshell#11>", line 1, in -toplevel-
raise MinhaExcecao("Deu bode!")
MinhaExcecao: Deu bode!
Exemplo 1
>>> try:
a = input("Entre com um numero ") b = input("Entre com outro numero ") print a, "/", b, "=", a/b
except ZeroDivisionError:
print "Ooops, segundo numero não pode ser zero!"
Entre com um numero 1
Entre com outro numero 0
1 / 0 = Ooops, segundo numero não pode ser zero!
Exemplo 2
>>> try:
a = input("Entre com um numero ") b = input("Entre com outro numero ")
print a, "/", b, "=", a/b
except (ZeroDivisionError,TypeError): print "Ooops, tente novamente!"
Entre com um numero 1
Entre com outro numero "a"
1 / a = Ooops, tente novamente!
Mais except
É possível tratar diferentemente as diversas exceções
usando 2 ou mais cláusulas except
Se quisermos nos prevenir contra qualquer tipo de erro,
podemos usar uma cláusula except sem nome de classe
Outra opção é usar a classe Exception que é base para
todas as exceções e portanto casa com qualquer exceção
Se não queremos tratar um erro em uma cláusula
except, podemos passá-la adiante usando o comando
raise
Nesse caso, podemos usar um raise sem argumentos ou
passar explicitamente um objeto de exceção
Exemplo 4
>>> try:
a = input("Entre com um numero ") b = input("Entre com outro numero ") print a, "/", b, "=", a/b
except ZeroDivisionError:
print "Ooops, divisão por zero"
except TypeError:
print "Ooops, você não deu um número"
except:
print "Deu um bode qualquer"
Entre com um numero 2
Entre com outro numero fads
Deu um bode qualquer
A cláusula else
É possível completar um comando try com uma cláusula
else que introduz um trecho de código que só é
executado quando nenhuma exceção ocorre:
try: Código except Exceções : Código de tratamento da exceção else: Código executado se não ocorrem exceções
Exemplo 6
while True:
try: a = input("Entre com um numero ") b = input("Entre com outro numero ") print a, "/", b, "=", a/b except Exception,e: print "Deu bode:",e print "Tente novamente" else: break
Entre com um numero 1 Entre com outro numero xxx Deu bode: name 'xxx' is not defined Tente novamente Entre com um numero 1 Entre com outro numero 2 1 / 2 = 0
Exemplo 7 (Python 2.5)
>>> try:
... x = input("Entre com um número")
... except:
... print "Deu Bode"
... finally:
... print "restabelecendo um valor para x"
... x = None
Entre com um número 1xx
Deu Bode
restabelecendo um valor para x
Exemplo 7 (Python 2.4)
>>> try:
... try:
... x = input("Entre com um número")
... finally:
... print "restabelecendo um valor para x"
... x = None
... except:
... print "Deu Bode"
Entre com um número 1xx
restabelecendo um valor para x
Deu Bode