Computação II (MAB 225)

Documentos relacionados
Computação II Orientação a Objetos

Computação II Orientação a Objetos

Python: Exceções, Iteradores e Geradores. Claudio Esperança

MCG126 Programação de Computadores II

Tratamento de Exceções

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

TRATAMENTO DE EXCEÇÕES

Computação II (MAB 225)

Programação Java. Tratamento de Exceções

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

1/ 26. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc.

1/ 23. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

Computação I - Python Aula 1 - Prática: Primeiros Passos- Função

Computação II (MAB 225)

Java para Desktop. Exceções JSE

Notas de Aula 09: Tratamento de exceções

Módulos. from <nome do modulo> import <nome objecto> Módulos

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

Computação 2. Aula 8 Teórica professor: Leonardo Carvalho

Tratamento de Exceções em Java

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Programação Orientada a Objetos (DPADF 0063)

Tratamento de Exceções. Prof. Marcelo Roberto Zorzan

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Computação 1 - Python Aula 4 - Teórica Variáveis e Atribuição, Strings. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 30

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Computação I - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Computação 1 - Python Aula 2 - Teórica. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 39

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Computação I - Python

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Tratamento de Exceções

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP

Programação Orientada a Objetos. Manipulação de Exceções

Introdução à Programação Aula 13 Manipulação de ficheiros

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

MAB224 Programação de Computadores II. Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro

Programação I Aula 13 Manipulação de ficheiros

Python 3.x Estrutura de Repetição for Estrutura de Decisão if then else

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Template de classe. class vetor { int *arranjo; int limite; public: vetor(int=100); int & operator[ ](int n); };

22/9/16. Agenda. Erros. Erros. Exceções. Mecanismo de exceções

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Tratamento de Exceções

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

LINGUAGEM DE PROGRAMAÇÃO I

Computação 1 - Python 1/ 41

Laboratório de Programação 1 Aula 04

Tratamento de Exceções

Nesta aula... Diagramas da stack. Recursão. 1 Funções. 2 Valores booleanos e condicionais. 3 Execução condicional e recursão

Programação Orientada a Objetos

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Algoritmos e Estruturas de Dados I (DCC/003) Funções

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Material sobre Funções AEDS 1

1 Ficheiros Métodos sobre ficheiros Ficheiros de texto vs. binários Procurar ocorrências de uma palavra...

Programação Orientada a Objetos II

Computação 1 - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings 1/ 26

Padrão para a codificação em Python

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

Introdução à Programação / Programação I

Tratamento de Exceções. Julio Cesar Nardi

Computação 2. Revisão Geral professor: Leonardo Carvalho

[Desenvolvimento OO com Java] Exceções e controle de erros

Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004

1.6. Tratamento de Exceções

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

Compiladores Análise Semântica

A R R A Y S E E X C E P T I O N S P R O F. M E. H É L I O E S P E R I D I Ã O

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Laboratório de programação II

Computação II (MAB 225)

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Tratando exceções em Java

Introdução à Programação Aula 17 Deteção e correção de erros

Introdução ao Python. Programa Computacional

Listas, conjuntos e dicionários

Programação Orientada a Objetos

Estruturas de Controle

Palavras Reservadas da Linguagem Java

Python 3.x Estrutura de Repetição while

Programação I Aula 4 Definição de procedimentos e funções

terminar o programa; retornar um valor de erro indicando falha; retornar e ignorar o problema; chamar uma função para tratar o erro, etc...

Transcrição:

Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo

Tratamento de Erros Até agora não nos preocupamos com erros em nosso programa, apenas assumimos que tudo sempre dá certo Todas as entradas para nossos construtores e métodos estão corretas Toda operação é bem sucedida Na prática, erros acontecem, e operações falham Uma maneira de indicar erros é em banda: um método retorna um ou mais valores especiais para indicar um erro, ao invés de seu retorno normal

Exceções O tratamento de erros também pode ser fora de banda: um erro é sinalizado e tratado por um mecanismo diferente da chamada e retorno de método Esse mecanismo são as exceções Uma exceção é um objeto que sinaliza que uma falha aconteceu Uma exceção é lançada quando ocorre uma falha, o lançamento interrompe a execução do programa, e transfere o controle para um tratador de exceções, um trecho de código instalado por algum dos métodos que estão executando no momento

Exceções - Definindo Exceções são objetos como qualquer outro, mas sempre são instâncias de Exception, ou de uma subclasse de Exception Uma classe que extende Exception, ou uma classe que extende uma classe que extende Exception, etc. Geralmente, a classe da exceção deve indicar a categoria da falha que aconteceu ArithmeticError, KeyError, NameError, FloatingPointError, IOError, ImportError, IndeError, NotImplementedError, StopIteration, ZeroDivisionError, e muitas outras

Exceções - Lançando Lançamos uma exceção (lembrando: uma instância de uma classe de exceção) usando o comando raise, passando para ela a exceção: def next(self): if self.a > self.b: raise StopIteration() else: atual = self.a self.a = self.a + 1 return atual O mais comum é instanciar a exceção no próprio comando raise, mas isso não é necessário: si = StopIteration(); raise si;

Pilha de Execução Quando um método chama outro, a execução do primeiro fica suspensa no ponto da chamada até que ela termine Os métodos que estão suspensos em um dado momento formam a pilha de execução O lançamento de uma exceção interrompe o fluxo normal de execução, e faz a execução ir abandonando os métodos que estão na pilha até chegar a um que possua um tratador para aquela exceção Se não houver nenhum tratador, o programa inteiro é abortado!

Exceções - Capturando Instalamos um tratador de exceções usando um bloco try/except: try: print it.next() except StopIteration: print "acabou!" Qualquer exceção que aconteça durante a execução do bloco try que não tenha sido tratada e que seja subclasse da classe dada na cláusula except é capturada, e então o bloco except é executado Se não ocorrer nenhuma outra exceção no bloco except, a execução prossegue normalmente com o que venha depois do try/except

Exceções - Sutilezas O tratador de exceções mais recente na pilha de execução tem preferência, então não é garantido que o bloco except seja executado caso uma exceção ocorra, já que ela pode ser tratada antes A declaração que segue a cláusula except diz quais exceções queremos tratar: uma instância da classe dada, ou de uma classe que extende ela, ou de uma classe que extende uma classe que extende ela, etc. Se o tipo da exceção não bate, é como se o tratador não existisse, e continuamos a busca na pilha de execução Se uma exceção ocorre dentro do bloco except, ela não pode ser tratada pelo próprio bloco: a execução dele é interrompida, e outra busca começa

Múltiplos except Um bloco try/except pode ter múltiplos blocos except, cada um capturando um tipo diferente de exceção Cada except introduz um tratador para o seu tipo: try: print it.next() except StopIteration: print "acabou!" except Exception: print "outro problema" Se queremos um bloco except que captura qualquer exceção é só não dar o tipo de exceção que queremos, (except:)

Mensagens em exceções Todas as exceções pré-definidas possuem um construtor que recebe uma mensagem de erro opcional como seu primeiro parâmetro Essa mensagem fica armazenada no campo message do objeto da exceção, e é usada para formatar uma mensagem de erro pelo interpretador se a exceção não for capturada e encerrar o programa >>> e = Exception("mensagem de erro") >>> e.message 'mensagem de erro' >>> raise e Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> raise e Exception: mensagem de erro >>>

Capturando o objeto exceção Quando capturamos uma exceção em um bloco except, podemos dar nome ao objeto exceção capturado com as: try: f = open('arquivo.txt') s = f.readline() except IOError as e: print "Erro de I/O: %s" % e.message Várias classes de exceção têm campos que dão mais informação sobre o erro que aconteceu IOError, por exemplo, tem um campo filename que diz qual arquivo foi a fonte do erro

Código de Finalização Algumas vezes, temos código que precisa ser executado mesmo que uma exceção aconteça, independente de qual seja a exceção Uma maneira de fazer isso seria duplicando esse código, e usando um tratador vazio: try: try: # código normal except...: # outros tratadores de exceção... # finalização except Exception as e: # finalização raise e Existe um jeito melhor: a cláusula finally

Usando finally Podemos terminar um comando try/except com um bloco finally: try: # código normal except...: # outros tratadores de exceção... finally: # finalização O bloco finally sempre é executado, ocorra ou não uma exceção Se não ocorrer uma exceção, ele é executado após o bloco try, e se ocorrer alguma exceção ele é executado antes de abandonar o contexto atual