Olá, estudante! Animado(a) depois do nosso último encontro em que vimos sobre os tipos e estruturas de dados? Espero que sim. Nesta lição, nosso principal objetivo é familiarizar você com os conceitos fundamentais de tratamento de erros em Python. O tratamento de erros é uma parte crucial da programação, pois ajuda a lidar com situações inesperadas que podem ocorrer durante a execução de um programa. Para isso, você verá como compreender a importância do tratamentos de erros, a identificar tipos comuns de erros, a utilizar declarações try e except e a gerenciar exceções personalizadas
Ao final desta lição, você, técnico em desenvolvimento de sistemas, terá uma compreensão sólida dos princípios do tratamento de erros em Python e estará pronto para aplicar esses conceitos em seus próprios projetos de programação, melhorando a qualidade e a confiabilidade de seus programas.
O desenvolvimento de software é uma tarefa complexa que envolve a criação de programas de computador para realizar tarefas específicas. Durante esse processo, os desenvolvedores enfrentam inúmeras situações desafiadoras, sendo uma delas a gestão de erros. Os erros são inevitáveis em qualquer projeto de software e podem surgir de diversas maneiras, desde entradas incorretas do usuário até problemas inesperados de hardware.
O problema central que o tratamento de erros resolve no dia a dia do desenvolvimento de software é a garantia de que o software seja robusto, confiável e capaz de lidar com situações adversas sem falhar completamente. Tratar situações como entradas inválidas do usuário, manipulação de arquivos, comunicação com serviços externos e operações matemáticas e lógicas, e principalmente, com exceções não esperadas, são situações em que o tratamento de erros desempenha um papel fundamental.
O tratamento de erros é essencial para garantir que um software seja capaz de lidar com as incertezas do ambiente em que opera. Ele não apenas impede que o software quebre inesperadamente, mas também melhora a experiência do usuário, fornecendo mensagens de erro informativas e evitando resultados indesejados.
No case fictício de hoje, você conhecerá a TechSoluções que é uma empresa de software que se especializa em desenvolver sistemas de gestão empresarial personalizados para empresas de médio porte. Recentemente, a empresa trabalhou em um projeto importante para uma rede de supermercados chamada ‘SuperMercadoX’, que desejava modernizar suas operações e substituir seu sistema de gerenciamento legado por um software mais eficiente e adaptado às suas necessidades específicas. Isso incluía funções como gerenciamento de estoque, vendas, finanças e recursos humanos.
A equipe então desenvolveu um software personalizado chamado ‘SuperGestorX’ que atendia às necessidades do cliente. O software era um sistema complexo, interligando várias áreas da operação do supermercado para melhorar a eficiência e a tomada de decisões. Durante o desenvolvimento e a implantação do SuperGestorX, a equipe de desenvolvimento enfrentou vários desafios relacionados ao tratamento de erros. Um dos exemplos foi que o software precisava se comunicar com os sistemas de alguns fornecedores externos. Quando esses sistemas estavam indisponíveis ou retornavam dados inesperados, o tratamento de erros permitia que o SuperGestorX continuasse funcionando sem interrupções.
Graças ao eficaz tratamento de erros implementado pela equipe de desenvolvimento, o SuperGestorX foi lançado com sucesso e se tornou a espinha dorsal das operações do SuperMercadoX. Observe que este case fictício ilustra como o tratamento de erros desempenha um papel crucial em projetos de software, garantindo que os sistemas funcionem de maneira confiável e eficaz, mesmo em face de situações imprevistas.
Erros em programação são problemas que ocorrem quando um programa não se comporta como esperado. Esses erros podem ocorrer de várias maneiras e em diferentes níveis de gravidade. Menezes (2017) nos diz que erros sempre podem ocorrer, pois, ora digitamos algo errado, ora esquecemos de digitar algo importante. Veja algumas das principais categorias de erros de programação:
Ocorrem quando o código viola as regras de sintaxe da linguagem de programação. Isso pode incluir erros de digitação, falta de parênteses ou ponto e vírgula, ou qualquer outra violação das regras gramaticais da linguagem.
Ocorrem quando o código está sintaticamente correto, mas a lógica por trás dele está incorreta. Isso significa que o programa faz algo diferente do que o programador pretendia. Identificar e corrigir erros lógicos pode ser mais desafiador, já que o código é executado, mas o resultado é incorreto.
Ocorrem durante a execução do programa. Eles podem incluir divisões por zero, tentativas de acessar índices inválidos em listas ou outros erros que ocorrem quando o programa está em execução. Erros de tempo de execução geralmente interrompem a execução do programa.
São um tipo de erro de tempo de execução. Elas ocorrem quando o programa encontra uma situação excepcional que não pode ser tratada normalmente. Por exemplo, tentar abrir um arquivo que não existe ou acessar um arquivo de leitura sem permissão pode gerar exceções.
Estão relacionados à lógica específica do domínio do problema. Eles ocorrem quando o programa não atende aos requisitos do usuário ou não se comporta de acordo com as regras de negócios estabelecidas.
Em Python, exceções são eventos que ocorrem durante a execução de um programa e interrompem o fluxo normal do código devido a algum tipo de erro ou situação excepcional. As exceções são usadas para lidar com erros e situações imprevisíveis de maneira controlada. Segundo Matthes (2023), sempre que ocorrer um erro que faça a linguagem de programação não ter certeza do que deve fazer em seguida, um objeto exceção será criado. Elas ajudam a manter a integridade do programa, fornecer informações úteis sobre o erro e facilitar o tratamento adequado desses problemas. Entenda as ‘fases’ de uma exceção em Python:
Exceção: É uma instância de uma classe que representa um tipo específico de erro. Por exemplo, ZeroDivisionError é uma exceção que ocorre quando tentamos dividir por zero.
Lançamento de Exceção: Um programador pode lançar explicitamente uma exceção usando a instrução raise. Isso é útil quando você deseja criar seu próprio tipo de exceção personalizada.
Captura de Exceção: É o processo de tratamento de exceções. Isso é feito usando a instrução try para envolver o código que pode gerar uma exceção e a instrução except para especificar como lidar com a exceção. Se ocorrer uma exceção dentro do bloco try, o código no bloco except será executado.
Em Python, os blocos try, except, else e finally são usados para lidar com exceções. Eles permitem que você crie um controle estruturado para capturar e gerenciar exceções. Conheça o uso de cada um destes blocos:
É usado para envolver o código que pode gerar uma exceção. Ele define uma seção crítica do código onde você espera que ocorram exceções. Se uma exceção ocorrer dentro do bloco try, a execução do bloco será interrompida, e o Python procurará por um bloco except correspondente.
É onde você especifica como lidar com exceções específicas que podem ocorrer dentro do bloco try. Você pode ter vários blocos except para diferentes tipos de exceções, ou um bloco except genérico que captura qualquer exceção não tratada anteriormente.
É opcional e é executado se nenhum erro ocorrer dentro do bloco try. Isso permite que você coloque código que deve ser executado apenas se não houver exceções. É útil quando você deseja realizar ações específicas se nenhum erro ocorrer.
É opcional e é executado independentemente de ter ocorrido uma exceção ou não. É usado para realizar ações de limpeza, como fechar arquivos, liberar recursos ou finalizar tarefas. É garantido que o bloco finally será executado, independentemente de exceções.
Você pode levantar exceções manualmente em Python usando a instrução raise. Isso é útil quando você deseja indicar que ocorreu um erro específico em seu código. Veja na figura 1 um exemplo de instrução raise:
O módulo logging em Python é uma biblioteca padrão poderosa que permite registrar informações detalhadas sobre erros, eventos e outras mensagens no código. Ele é útil para fins de depuração, monitoramento e registro de informações importantes durante a execução de um programa. O módulo logging fornece flexibilidade para controlar o que é registrado, como é registrado e para onde as mensagens de registro são direcionadas. Para usá-lo você só precisa importar o módulo logging em seu código. Exemplo: import logging
Você pode registrar mensagens usando diferentes níveis, dependendo da importância da mensagem. Os níveis comuns incluem DEBUG, INFO, WARNING, ERROR E CRITICAL, veja um exemplo na figura 02:
O módulo pode ser usado em conjunto com blocos try…except para registrar informações detalhadas sobre exceções. Ele é uma ferramenta poderosa para gerar registros detalhados que podem ser úteis ao depurar e monitorar aplicativos. Personalizar a configuração do logger, os níveis de registro e o formato das mensagens pode ajudar a atender às necessidades específicas do seu projeto.
O tratamento de erros é muito importante, segundo Matthes (2023), tratar erros de forma correta é importante, em especial quando o programa tiver outras atividades para fazer depois que o erro ocorrer. Lembre-se sempre de Menezes (2017), que nos aconselha a utilizar as mensagens de erro como um bom palpite do que ocorreu, pois o que elas realmente indicam é onde, em seu programa, o interpretador foi interrompido e a causa desta interrupção. É investigando que você encontrará o verdadeiro erro.
O tratamento de erros em Python desempenha um papel vital no desenvolvimento de sistemas, proporcionando uma experiência do usuário mais satisfatória, prevenindo falhas inesperadas, garantindo a segurança dos dados, facilitando a manutenção do código e aumentando a resiliência do sistema. Ao lidar adequadamente com exceções, você, técnico em desenvolvimento de sistemas, pode fornecer mensagens de erro claras, identificar e corrigir problemas antes que causem falhas graves, prevenir vulnerabilidades de segurança, facilitar a compreensão e modificação do código e permitir que os aplicativos se recuperem de falhas de forma elegante, garantindo assim a confiabilidade e robustez dos sistemas.
No saiba aplicar de hoje, você irá implementar o tratamento de erros em Python. Para isso, siga o passo a passo a seguir para a implementação:
Abra seu navegador web e acesse o site OnlineGDB em https://www.onlinegdb.com.
Escolha a linguagem de programação que deseja usar. Selecione “Python” na lista suspensa.
No editor de código, você pode escrever o código Python conforme a Figura 01.
Clique no botão ‘Run’ na parte superior da janela para executar o código.
Teste o tratamento de erros:
O programa solicitará que você insira dois números.
Tente inserir diferentes valores para testar o tratamento de erros:
Insira dois números válidos e veja o resultado.
Tente dividir por zero e observe a mensagem de erro.
Insira valores não numéricos, como letras, e observe a mensagem de erro correspondente.
Segue algumas explicações sobre o código da Figura 03.
Linhas 1, 7, 9, 11: Estrutura de try except que indica ou o código funciona (try) ou alguma opção de except irá lidar com o erro.
Linhas 2 a 5: Caminho feliz do código onde é solicitado dois números ao usuário, o programa divide o primeiro número pelo segundo e o resultado da divisão é exibido.
Linhas 7 e 8: Exceção quando o usuário digita o segundo número como 0 (zero) ou seja, será exibido ao usuário um erro informando que divisão por zero não é permitida.
Linhas 9 e 10: Exceção quando o usuário digita valores que não são números válidos, onde será exibido então ao usuário um erro solicitando que o usuário digite números válidos.
Linhas 11 e 12: Qualquer outra exceção que não se tenha descoberto no momento de construção do código terá como retorno: Erro não especificado.
Este é um exemplo simples de tratamento de erros em Python. Você pode experimentar diferentes tipos de erros e personalizar o código de acordo com suas necessidades de aprendizado.
MATTHES, E. Curso Intensivo de Python: uma introdução prática e baseada em projetos à programação. 3. São Paulo: ed. Novatec, 2023.
MENEZES, N. N. C. Introdução à Programação com Python: algoritmos e lógica de programação para iniciantes. 2. São Paulo: ed. Novatec, 2017.