Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012 Exceções Ocorrem quando algum evento não desejado ocorre Erros não previstos Eventos esperados, mas não desejados Se uma exceção ocorre e não é tratada, o programa termina emitindo uma mensagem Classes de exceções O Python define algumas classes de exceções Exception Classe Base para todas as exceções AttributeError Falha no acesso ou atribuição a atributo de classe IOError Falha no acesso a arquivo inexistente ou outros de E/S IndexError Índice inexistente de sequência KeyError Chave inexistente de dicionário Classes de exceções O Python define algumas classes de exceções NameError Variável inexistente SyntaxError Erro de sintaxe (código errado) TypeError Operador embutido aplicado a objeto de tipo errado ValueError Operador embutido aplicado a objeto de tipo certo mas valor inapropriado ZeroDivisionError Divisão ou módulo por zero Exercício Entre no interpretador e gere cada um dos erros anteriores. Classes de exceção O usuário também pode criar suas próprias classes de exceção Serão chamadas em pontos do código especificados pelo usuário Quando uma exceção ocorre, diz que o programa gerou uma exceção (raise) Um programa bem feito deve ser capaz de capturar (catch) todas as exceções que possam ser geradas Evita que o programa termine com uma mensagem de erro inesperada Classes de exceções O Python também define uma classe para tratar warnings Warnings são avisos que devem ser observados, mas que não são suficientemente graves para gerar um erro Warnings também podem ser definidos pelo usuário Tratando exceções com try/except Se um trecho de código pode gerar uma exceção, mas você não quer que o programa termine, é possível tratar com o try/except Uso: try: Comandos except: comandos Exemplos Essa clausula pega qualquer tipo de exceção e retorna a mesma mensagem. Exemplos Tratando separadamente diversos tipos de exceção Exemplos Agrupando erros Exemplos Usando o erro gerado pelo Python Palavra chave para não fazer nada Variável para pegar a mensagem de erro padrão Variável para pegar a mensagem de erro padrão Gerando exceções em seu código Para gerar uma exceção, use o comando raise Uso raise classe raise classe, mensagem raise classe (mensagem) Classe de exceção Listagem de classes de exceção definidas pelo Python disponível no manual ou digitando: import exceptions print dir(exceptions) Exemplos Criando uma classe de exceções Basta criar uma classe normal, a qual herda de uma classe de exceção Exemplos Exemplos Clausula else O comando try pode ser terminado com uma cláusula else O código do else só é executado na ausência de exceção no bloco try Uso try: Código except Exceções: Código de tratamento da exceção else: Código executado se não ocorrem exceções Clausula finally A cláusula finally sempre é executada, acontecendo exceção ou não Pode ser usada para restabelecer alguma variável para um valor default, por exemplo Exemplo Exercício Gere uma função que escolhe um número inteiro entre 0 e 10 aleatoriamente. O usuário poderá entrar com números até acertar o valor escolhido. Nesse caso, o programa termina com uma mensagem de sucesso. Caso o usuário acerte de primeira, o programa deve gerar uma exceção com a mensagem “Você tem poderes psíquicos”, gerar um novo número e continuar o processo. Nenhuma outra exceção deve terminar o programa ou escrever uma mensagem na tela. (Use try, except, else e raise)