SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
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 -toplevel-
       1/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 -toplevel-
    raise Exception
Exception
>>> raise Exception,"Deu bode"

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in -toplevel-
    raise Exception,"Deu bode"
Exception: Deu bode
>>> raise Exception("Deu Bode")

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in -toplevel-
    raise Exception("Deu Bode")
Exception: Deu Bode
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!
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 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 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 -toplevel-
    b = 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
 Até a versão 2.4 do python, as cláusula finally e
  except eram mutuamente exclusivas
      Exceções nesse caso não eram tratadas
      Era possível combinar ambas usando comandos try
       aninhados
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
Iteradores
 São maneiras genéricas de implementar iterações com
  classes
      Permite o uso do comando for
      É muitas vezes 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 a 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 =    0
j =    0
i =    1
j =    1
....
i =    9
j =    9

Contenu connexe

Tendances

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Iniciando em Python
Iniciando em PythonIniciando em Python
Iniciando em PythonRober Guerra
 
Sistema de Login php.pptx
Sistema de Login php.pptxSistema de Login php.pptx
Sistema de Login php.pptxJosivaldoFrana1
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controleProfessor Samuel Ribeiro
 
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresLogica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresRegis Magalhães
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de RepetiçãoProfessor Samuel Ribeiro
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoVinícius de Paula
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticosCentro Paula Souza
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - ProcedimentoWesley R. Bezerra
 

Tendances (20)

C completo-total
C completo-totalC completo-total
C completo-total
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Iniciando em Python
Iniciando em PythonIniciando em Python
Iniciando em Python
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Sistema de Login php.pptx
Sistema de Login php.pptxSistema de Login php.pptx
Sistema de Login php.pptx
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresLogica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Poo
PooPoo
Poo
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - Procedimento
 

Similaire à Programando em python excecoes

10 programando em python - excecoes
 10   programando em python - excecoes 10   programando em python - excecoes
10 programando em python - excecoesVictor Marcelino
 
Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3guestd6da1cd
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: ExceçõesEduardo Mendes
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoesLeandro Barbosa
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 

Similaire à Programando em python excecoes (20)

10 programando em python - excecoes
 10   programando em python - excecoes 10   programando em python - excecoes
10 programando em python - excecoes
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Repetições e vetores
Repetições e vetoresRepetições e vetores
Repetições e vetores
 
Excecoes em Java
Excecoes em JavaExcecoes em Java
Excecoes em Java
 
PowerShell
PowerShellPowerShell
PowerShell
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Programando em python - Classes
Programando em python -  ClassesProgramando em python -  Classes
Programando em python - Classes
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoes
 
Java 13 Excecoes
Java 13 ExcecoesJava 13 Excecoes
Java 13 Excecoes
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 

Plus de samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_vsamuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_ivsamuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iiisamuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_iisamuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_isamuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iisamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)samuelthiago
 

Plus de samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 07
Java 07Java 07
Java 07
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 03
Java 03Java 03
Java 03
 
Java 02
Java 02Java 02
Java 02
 
Java 01
Java 01Java 01
Java 01
 

Dernier

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Dernier (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Programando em python excecoes

  • 1. Python: Exceções, Iteradores e Geradores Claudio Esperança
  • 2. 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 -toplevel- 1/0 ZeroDivisionError: integer division or modulo by zero
  • 3. 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
  • 4. 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
  • 5. 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', ...
  • 6. Exemplo >>> raise Exception Traceback (most recent call last): File "<pyshell#3>", line 1, in -toplevel- raise Exception Exception >>> raise Exception,"Deu bode" Traceback (most recent call last): File "<pyshell#5>", line 1, in -toplevel- raise Exception,"Deu bode" Exception: Deu bode >>> raise Exception("Deu Bode") Traceback (most recent call last): File "<pyshell#7>", line 1, in -toplevel- raise Exception("Deu Bode") Exception: Deu Bode
  • 7. Algumas Classes de Exceção
  • 8. 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!
  • 9. 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
  • 10. 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!
  • 11. 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!
  • 12. 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'
  • 13. 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
  • 14. 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
  • 15. 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 -toplevel- b = input("Entre com outro numero ") EOFError: EOF when reading a line
  • 16. 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
  • 17. 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
  • 18. 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  Até a versão 2.4 do python, as cláusula finally e except eram mutuamente exclusivas  Exceções nesse caso não eram tratadas  Era possível combinar ambas usando comandos try aninhados
  • 19. 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
  • 20. 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
  • 21. Iteradores  São maneiras genéricas de implementar iterações com classes  Permite o uso do comando for  É muitas vezes 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
  • 22. 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
  • 23. Geradores  Geradores são funções especiais que retornam iteradores  Em resumo, uma função geradora é uma que contém a 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
  • 24. Exemplo >>> def gerador(): for i in range(10): print "i = ", i yield i >>> for j in gerador(): print "j = ",j i = 0 j = 0 i = 1 j = 1 .... i = 9 j = 9