13.12.2012 Views

Tutorial Python

Tutorial Python

Tutorial Python

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

é impresso como parte da mensagem . Os tipos no exemplo são: ZeroDivisionError, NameError e<br />

TypeError. A string impressa como sendo o tipo da exceção é o nome interno da exceção que ocorreu. Isso é<br />

verdade para todas exceções pré-definidas em <strong>Python</strong>, mas não é necessariamente verdade para exceções definidas<br />

pelo usuário.<br />

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

A parte anterior da mensagem de erro apresenta o contexto onde ocorreu a exceção. Essa informação é denominada<br />

stack traceback (N.d.T: rastreamento da pilha para trás). Em geral, contém uma lista de linhas do código fonte,<br />

sem apresentar, no entanto, valores lidos da entrada padrão.<br />

O documento Referência da Biblioteca <strong>Python</strong> lista as exceções pré-definidas e seus significados.<br />

8.3 Tratamento de Exceções<br />

É possível escrever programas que tratam exceções específicas. Observe o exemplo seguinte, que pede dados ao<br />

usuário até que um inteiro válido seja fornecido, ainda permitindo que o programa seja interrompido (utilizando<br />

Control-C ou seja lá o que for que o sistema operacional suporte). Note que uma interrupção gerada pelo<br />

usuário será sinalizada pela exceção KeyboardInterrupt.<br />

>>> while True:<br />

... try:<br />

... x = int(raw_input("Entre com um número: "))<br />

... break<br />

... except ValueError:<br />

... print "Opa! Esse número não é válido. Tente de novo..."<br />

...<br />

A construção try funciona da seguinte maneira:<br />

• Primeiramente, a cláusula try (o conjunto de comandos entre as palavras-reservadas try e except ) é<br />

executado.<br />

• Se não for gerada exceção, a cláusula except é ignorada e termina a execução da construção try.<br />

• Se uma execução ocorre durante a execução da cláusula try, os comandos remanescentes na cláusula são<br />

ignorados. Se o tipo da exceção ocorrida tiver sido previsto junto àlguma palavra-reservada except, então<br />

essa cláusula será executada. Ao fim da cláusula também termina a execução do try como um todo.<br />

• Se a exceção ocorrida não foi prevista em nenhum tratador except da construção try em que ocorreu,<br />

então ela é entregue a uma construção try mais externa. Se não existir nenhum tratador previsto para tal<br />

exceção (chamada unhandled exception), a execução encerra com uma mensagem de erro.<br />

A construção try pode ter mais de uma cláusula except para especificar múltiplos tratadores para diferentes<br />

exceções. No máximo um único tratador será ativado. Tratadores só são sensíveis as exceções levantadas no<br />

interior da cláusula try, e não que tenha ocorrido no inteiror de outro tratador num mesmo try. Um tratador<br />

pode ser sensível a múltiplas exceções, desde que as especifique em uma tupla:<br />

... except (RuntimeError, TypeError, NameError): ... pass<br />

A última cláusula except pode omitir o nome da exceção, servindo como uma máscara genérica. Utilize esse<br />

recurso com extrema cautela, uma vez que isso pode esconder errors do programador e do usuário. Também<br />

pode ser utilizado para imprimir uma mensagem de erro, ou re-levantar (re-raise) a exceção de forma que um<br />

“chamador” também possa tratá-la.<br />

54 Capítulo 8. Erros e Exceções

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!