SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Python:
Exceções, Iteradores e Geradores

Claudio Esperança
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:
>>> 1/0
Traceback (most recent call last):
File "<pyshell#0>", line 1, in -toplevel1/0
ZeroDivisionError: integer division or modulo by
zero
Objetos de Exceção
 Cada exceção individual corresponde a um objeto de 

exceção, que por sua vez é uma instância de alguma classe 
de exceção


No exemplo anterior, tal objeto é instância da classe 
ZeroDivisionError

 Diz­se que o programa gerou ou levantou (raised, em 

inglês) uma condição de exceção na forma de um objeto
 Um programa bem elaborado precisa capturar (catch, em 
inglês) tais objetos e tratá­los para que a execução não seja 
abortada
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', ...
Exemplo
>>> raise Exception
Traceback (most recent call last):
File "<pyshell#3>", line 1, in -toplevelraise Exception
Exception
>>> raise Exception,"Deu bode"
Traceback (most recent call last):
File "<pyshell#5>", line 1, in -toplevelraise Exception,"Deu bode"
Exception: Deu bode
>>> raise Exception("Deu Bode")
Traceback (most recent call last):
File "<pyshell#7>", line 1, in -toplevelraise Exception("Deu Bode")
Exception: Deu Bode
Algumas Classes de Exceção

Classe
Exception
AttributeError
IOError
IndexError
KeyError
NameError
SyntaxError
TypeError
ValueError
ZeroDivisionError

Descrição
Classe base para todas as exceções
Falha no acesso ou atribuição a atributo de classe
Falha no acesso a arquivo inexistente ou outros de E/S
Índice inexistente de seqüência
Chave inexistente de dicionário
Variável inexistente
Erro de sintaxe (código errado)
Operador embutido aplicado a objeto de tipo errado
Operador embutido aplicado a objeto de tipo certo mas
valor inapropriado
Divisão ou módulo por zero
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 -toplevelraise MinhaExcecao("Deu bode!")
MinhaExcecao: Deu bode!
Capturando Exceções
 Para capturar uma exceção possivelmente levantada por um trecho de 

código, pode­se usar a construção try/except:
try:
Código
except Exceções:
Código de tratamento da exceção
 Sendo que Exceções pode ser:
Classe
 Classe,var
 (Classe1,...,ClasseN)
 (Classe1,...,ClasseN),var
 Onde:





Classe, Classe1 e ClasseN são nomes de classes de exceção
Var é uma variável à qual é atribuída um objeto de exceção
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!
Exemplo 3
>>> try:
a = input("Entre com um numero ")
b = input("Entre com outro numero ")

print a, "/", b, "=", a/b
except (ZeroDivisionError,TypeError),e:
print "Ooops, deu erro:",e

Entre com um numero 1
Entre com outro numero "z"
1 / z = Ooops, deu erro: unsupported operand
type(s) for /: 'int' and 'str'
Mais except
 É possível tratar diferentemente as diversas exceções 

usando duas 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 quisermos 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 fads2312
Deu um bode qualquer
Exemplo 5
>>> try:
a = input("Entre com um numero ")
b = input("Entre com outro numero ")
print a, "/", b, "=", a/b
except (ZeroDivisionError,TypeError),e:
print "Ooops, deu erro:",e
except Exception,e:
print "Deu bode não previsto:",e
raise
Entre com um numero a
Entre com outro numero
Deu bode não previsto: EOF when reading a line
Traceback (most recent call last):
File "<pyshell#52>", line 3, in -toplevelb = input("Entre com outro numero ")
EOFError: EOF when reading a line
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
A cláusula finally
 A cláusula finally pode ser usada para se assegurar que 

mesmo que ocorra algum erro, uma determinada 
seqüência de comandos vai ser executada


Pode ser usada para restabelecer alguma variável para um 
valor default, por exemplo

 A cláusula finally e cláusulas except são mutuamente 

exclusivas



Exceções nesse caso não são tratadas
É possível combinar ambas usando comandos try 
aninhados, mas normalmente não há muito uso para isso
Exemplo 7
>>> 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 2xx
restabelecendo um valor para x
Deu bode
Iteradores
 São maneiras genéricas de implementar iterações com 

classes



Permite o uso do comando for
É geralmente mais econômico do que usar uma lista pois 
não é preciso armazenar todos os valores, mas apenas 
computar um por vez

 Um iterador é uma classe que implementa o método 

mágico __iter__


É um método que, por sua vez, retorna um objeto que 
implementa um método chamado next



O método next deve retornar o “próximo” valor a ser iterado
Se não há próximo valor, next deve “levantar” a exceção 
StopIteration
Exemplo
>>> class MeuIterador:
a = 0
def __iter__(self): return self
def next(self):
if self.a>10: raise StopIteration
self.a += 1
return self.a
>>> iter = MeuIterador()
>>> for i in iter:
print i,
1 2 3 4 5 6 7 8 9 10 11
Geradores
 Geradores são funções especiais que retornam iteradores
 Em resumo, uma função geradora é uma que contém o 

comando yield valor
 Uma função geradora normalmente é chamada para obter 
o iterador para um comando for



O comando for automaticamente iterará sobre todos os 
valores que yield “retorna”
Observe que o iterador produzido pela função geradora é 
tal que o código que gera os valores e o código dentro do for 
se sucedem alternadamente

 Geradores são especialmente úteis em códigos recursivos
Exemplo
>>> def gerador():
for i in range(10):
print "i = ", i
yield i

>>> for j in gerador():
print "j = ",j

i =
j =
i =
j =
....
i =
j =

0
0
1
1
9
9

Mais conteúdo relacionado

Destaque (9)

03 programando em python - comandos basicos
 03   programando em python - comandos basicos 03   programando em python - comandos basicos
03 programando em python - comandos basicos
 
Programando em python arquivos
Programando em python   arquivosProgramando em python   arquivos
Programando em python arquivos
 
02 programando em python - tipos basicos
 02   programando em python - tipos basicos 02   programando em python - tipos basicos
02 programando em python - tipos basicos
 
Pengenalan hardware
Pengenalan hardwarePengenalan hardware
Pengenalan hardware
 
13 programando em python - arquivos
 13   programando em python - arquivos 13   programando em python - arquivos
13 programando em python - arquivos
 
Priorizando os problemas de usabilidade na Web
Priorizando os problemas de usabilidade na WebPriorizando os problemas de usabilidade na Web
Priorizando os problemas de usabilidade na Web
 
02 entidade projeto-vhd-ivanl
02   entidade projeto-vhd-ivanl02   entidade projeto-vhd-ivanl
02 entidade projeto-vhd-ivanl
 
Slides - TCC Nayane Bragança
Slides  - TCC Nayane BragançaSlides  - TCC Nayane Bragança
Slides - TCC Nayane Bragança
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 

Mais de Victor Marcelino

08 programando em python - recursao
 08   programando em python - recursao 08   programando em python - recursao
08 programando em python - recursao
Victor Marcelino
 
09 programando em python - classes
 09   programando em python - classes 09   programando em python - classes
09 programando em python - classes
Victor Marcelino
 
01 programando em python - sistemas de numeracao
 01   programando em python - sistemas de numeracao 01   programando em python - sistemas de numeracao
01 programando em python - sistemas de numeracao
Victor Marcelino
 
00 programando em python - introducao
 00   programando em python - introducao 00   programando em python - introducao
00 programando em python - introducao
Victor Marcelino
 
07 programando em python - funcoes
 07   programando em python - funcoes 07   programando em python - funcoes
07 programando em python - funcoes
Victor Marcelino
 
12 programando em python - modulos
 12   programando em python - modulos 12   programando em python - modulos
12 programando em python - modulos
Victor Marcelino
 
14 programando em python - interfaces graficas com tk
 14   programando em python - interfaces graficas com tk 14   programando em python - interfaces graficas com tk
14 programando em python - interfaces graficas com tk
Victor Marcelino
 
11 programando em python - conjuntos
 11   programando em python - conjuntos 11   programando em python - conjuntos
11 programando em python - conjuntos
Victor Marcelino
 
06 programando em python - dicionarios
 06   programando em python - dicionarios 06   programando em python - dicionarios
06 programando em python - dicionarios
Victor Marcelino
 
05 programando em python - tuplas e strings
 05   programando em python - tuplas e strings 05   programando em python - tuplas e strings
05 programando em python - tuplas e strings
Victor Marcelino
 
04 programando em python - listas
 04   programando em python - listas 04   programando em python - listas
04 programando em python - listas
Victor Marcelino
 

Mais de Victor Marcelino (13)

Aprendendo python
Aprendendo pythonAprendendo python
Aprendendo python
 
08 programando em python - recursao
 08   programando em python - recursao 08   programando em python - recursao
08 programando em python - recursao
 
09 programando em python - classes
 09   programando em python - classes 09   programando em python - classes
09 programando em python - classes
 
01 programando em python - sistemas de numeracao
 01   programando em python - sistemas de numeracao 01   programando em python - sistemas de numeracao
01 programando em python - sistemas de numeracao
 
00 programando em python - introducao
 00   programando em python - introducao 00   programando em python - introducao
00 programando em python - introducao
 
07 programando em python - funcoes
 07   programando em python - funcoes 07   programando em python - funcoes
07 programando em python - funcoes
 
12 programando em python - modulos
 12   programando em python - modulos 12   programando em python - modulos
12 programando em python - modulos
 
14 programando em python - interfaces graficas com tk
 14   programando em python - interfaces graficas com tk 14   programando em python - interfaces graficas com tk
14 programando em python - interfaces graficas com tk
 
11 programando em python - conjuntos
 11   programando em python - conjuntos 11   programando em python - conjuntos
11 programando em python - conjuntos
 
06 programando em python - dicionarios
 06   programando em python - dicionarios 06   programando em python - dicionarios
06 programando em python - dicionarios
 
05 programando em python - tuplas e strings
 05   programando em python - tuplas e strings 05   programando em python - tuplas e strings
05 programando em python - tuplas e strings
 
04 programando em python - listas
 04   programando em python - listas 04   programando em python - listas
04 programando em python - listas
 
Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administration
 

Último

PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 

Último (20)

PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 

10 programando em python - excecoes