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