Advertisement
  1. Code
  2. Python

Manipulação de Erros e Registros em Python

by
Difficulty:BeginnerLength:ShortLanguages:

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Em desenvolvimento de software, vários tipos de erros acontecem. Eles podem ser de sintaxe, lógicos ou de execução.

Erros de sintaxe acontecem durante a fase inicial do desenvolvimento e são por sintaxe incorreta. Eles são pegos facilmente quando o programa é compilado para execução.

Erros lógicos, por outro lado, são resultado de implementação lógica imprópria. Um exemplo seria um programa acessar uma lista não ordenada como se tivesse ordenada. Erros lógicos são os mais difíceis de rastrear.

Erros de tempo de execução são os mais interessantes, se não considerarmos os casos extremos. Um exemplo seria tentar acessar um arquivo não existente.

Nesse tutorial, aprenderemos como lidar com erros em Python e como registrá-los para melhor entendê-los o que aconteceu de errado na aplicação.

Manipulando Exceções em Python

Comecemos com um programa simples que adiciona dois números. O programa recebe dois parâmetros de entrada e imprime a soma. Eis o programa em Python:

Tentemos executar o programa acima e veremos soma impressa.

Ao escrever o programa cima, não consideramos o que pode acontecer de errado. E se um dos parâmetros não forem números?

Não lidamos com esse caso, assim, nosso programa travaria com a seguinte mensagem de erro:

Podemos lidar com o problema acima checando se os parâmetros passados são inteiros. Mas isso não resolveria o problema. E se o programa acabar travando por outro motivo? Trabalhar com um programa que trava quando encontra um erro, não é um bom sinal. Mesmo que um erro desconhecido seja encontrado, o código deve ser robusto suficiente para lidar graciosamente e permitir o usuário saber que algo errado aconteceu.

Manipulando Exceções Usando Try e Except

Em Python, usamos try e except para lidar com exceções. Sempre que o código trava, uma exceção é lançada sem travar o programa. Modifiquemos o nosso programa para incluir as declarações de try e except.

Python processaria todo o código dentro de try e except. Ao encontrar um erro, o controle é passado para o bloco except, pulando o código antes dele.

Como visto acima, movemos nosso código para dentro de try e except. Ao executar o programa, uma mensagem de erro será mostrada ao invés de travá-lo. O motivo da exceção também é retornado como mensagem.

O método acima lida com exceções inesperadas. Vejamos como lidar com exceções esperadas. Assumamos que tentamos ler um arquivo específico no nosso programa, mas ele não existe. Nesse caso, lidaremos com a exceção e avisaremos o usuário que o arquivo não existe. Vejamos o código:

No código acima, lidamos com a leitura de arquivos no manipulador de erros IOError. Se o código travar pela não disponibilidade do arquivo fname, ele será lidado pelo manipulador IOError. Como as exceções IOError, existem várias outras exceções padrões, como Arithmetic, OverflowError e ImportError, para citar algumas.

Múltiplas Exceções

Podemos manipular múltiplas exceções de ums só vez, juntando exceções padrões, assim:

Esse código imprimiria mensagens para exceções IOError e NameError quando o programa executasse.

A Cláusula finally

Assumamos que usamos certos recursos em nosso programa. Durante sua execução, ele encontrou um erro e só foi executado pela metade. Nesse caso, o recurso ficaria preso desnecessariamente. Podemos limpar recursos usando a cláusula finally. Vejamos o código abaixo:

Se, durante a execução desse código, uma exceção fosse lançada durante a leitura de um arquivo, filePointer seria fechado no bloco finally.

Registrando em Python

Quando algo sair errado numa aplicação, a depuração é facilitada quando sabemos a fonte do erro. Quando uma exceção é lançada, podemos registrar a informação necessária para rastrear o problema. Python provê uma biblioteca simples e poderosa para registros. Vejamos como usá-la.

Como vemos acima, primeiro importamos a biblioteca de registros e inicializamos o registrador com o nome do registro e o nível. Há cinco níveis de registro: DEBUG, INFO, WARNING, ERROR e CRITICAL. Aqui, configuramos o nível como INFO, e ambos os erros seriam registrados.

Obtendo a Pilha de Rastreio

No código acima, tínhamos apenas um programa, por isso era fácil saber onde o erro aconteceu. Mas, o que acontece quando vários arquivos de programas estão envolvidos? Nesses casos, obter a pilha de rastreio do erro ajuda a encontrar a fonte do erro. Ela pode ser registrada, dessa forma:

Se executarmos o programa acima, ele lançaria uma exceção e o erro abaixo seria registrado no arquivo:

Resumindo

Nesse tutorial, vimos como começar a manipular erros em Python e a usar o módulo de registros para registrá-los. Vimos o uso de try, except e finally, que são bem úteis ao lidar com manipulação de erros. Para mais informações, recomendamos a leitura da documentação oficial sobre registros. A leitura sobre manipulação de erros em Python também é interessante.

Diga-nos o que achou nos comentários abaixo.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.