Exceções
Mesmo que um comando ou expressão estejam sintaticamente corretos, talvez ocorra um erro na hora de sua execução. Erros detectados durante a execução são chamados exceções e não são necessariamente fatais. Logo veremos como tratá-las em programas Python. A maioria das exceções não são tratadas e acabam resultando em mensagens de erro:
>>> 10 * (1/0)
Traceback (most recent call last):
File "", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "", line 1, in ?
NameError: name ’spam’ is not defined
>>> ’2’ + 2
Traceback (most recent call last):
File "", line 1, in ?
TypeError: cannot concatenate ’str’ and ’int’ objects
A última linha da mensagem de erro indica o que aconteceu. Exceções surgem com diferentes tipos, e o tipo é impresso como parte da mensagem . Os tipos no exemplo são: ZeroDivisionError, NameError eTypeError. A string impressa como sendo o tipo da exceção é o nome interno da exceção que ocorreu. Isso éverdade para todas exceções pré-definidas em Python, mas não é necessariamente verdade para exceções definidas pelo usuário. O resto da linha é um detalhamento que depende do tipo da exceção ocorrida e sua causa. A parte anterior da mensagem de erro apresenta o contexto onde ocorreu a exceção. Essa informação é denominada stack traceback (N.d.T: rastreamento da pilha para trás). Em geral, contém uma lista de linhas do código fonte, sem apresentar, no entanto, valores lidos da entrada padrão.
Tratamento de Exceções
É possível escrever programas que tratam exceções específicas. Observe o exemplo seguinte, que pede dados ao usuário até que um inteiro válido seja fornecido, ainda permitindo que o programa seja interrompido (utilizando Control-C ou seja lá o que for que o sistema operacional suporte). Note que uma interrupção gerada pelo usuário será sinalizada pela exceção KeyboardInterrupt.
>>> while True:
... try:
... x = int(raw_input("Entre com um número: "))
... break
... except ValueError:
... print "Opa! Esse número não é válido. Tente de novo..."
...
A construção try funciona da seguinte maneira:
• Primeiramente, a cláusula try (o conjunto de comandos entre as palavras reservadas try e except ) é executado.
• Se não for gerada exceção, a cláusula except é ignorada e termina a execução da construção try.
• Se uma execução ocorre durante a execução da cláusula try, os comandos remanescentes na cláusula são ignorados. Se o tipo da exceção ocorrida tiver sido previsto junto àlguma palavra-reservada except, entãoessa cláusula será executada. Ao fim da cláusula também termina a execução do try como um todo.
• Se a exceção ocorrida não foi prevista em nenhum tratador except da construção try em que ocorreu,então ela é entregue a uma construção try mais externa. Se não existir nenhum tratador previsto para tal exceção (chamada unhandled exception), a execução encerra com uma mensagem de erro. A construção try pode ter mais de uma cláusula except para especificar múltiplos tratadores para diferentes exceções. No máximo um único tratador será ativado. Tratadores só são sensíveis as exceções levantadas nointerior da cláusula try, e não que tenha ocorrido no inteiror de outro tratador num mesmo try. Um tratadorpode ser sensível a múltiplas exceções, desde que as especifique em uma tupla:
... except (RuntimeError, TypeError, NameError): ... pass
(Meterial retirado do endereço web http://www.python.org)
Nenhum comentário:
Postar um comentário