0% acharam este documento útil (0 voto)
26 visualizações41 páginas

Depuração de Python para Iniciantes

O documento aborda a importância da depuração de scripts em Python, destacando técnicas para identificar e corrigir erros durante o desenvolvimento. Ele discute a construção de scripts, tratamento de exceções e fornece exemplos práticos, além de descrever erros comuns como NameError, ValueError e TypeError. Ao final, enfatiza que a depuração é essencial para melhorar a qualidade do código e facilitar a resolução de problemas.

Enviado por

farmaciahemepar
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
26 visualizações41 páginas

Depuração de Python para Iniciantes

O documento aborda a importância da depuração de scripts em Python, destacando técnicas para identificar e corrigir erros durante o desenvolvimento. Ele discute a construção de scripts, tratamento de exceções e fornece exemplos práticos, além de descrever erros comuns como NameError, ValueError e TypeError. Ao final, enfatiza que a depuração é essencial para melhorar a qualidade do código e facilitar a resolução de problemas.

Enviado por

farmaciahemepar
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 41

Depuração de scripts com Python

Apresentação
Com a evolução da tecnologia, a programação se tornou essencial. Atualmente, o ser humano
utiliza a tecnologia para diversos fins, e a tecnologia depende diretamente da programação. Devido
a esse avanço, diversas linguagens de programação foram surgindo e evoluindo, e, nesse contexto,
surge a linguagem Python. No entanto, desenvolver em Python requer habilidade com o uso de
valores e variáveis, e nem sempre o processo sai totalmente conforme o desejado.

Por isso, depurar um código é uma técnica muito utilizada para manipular a execução das linhas em
particular e verificar se os valores recebidos pelas variáveis são adequados. Depurar pode definir o
ato de procurar, detectar, identificar e corrigir erros de um programa, e, atualmente, ferramentas de
depuração estão presentes em IDEs modernas e têm o objetivo de proporcionar a execução
cuidadosa de uma aplicação, seguindo um passo a passo que permita uma análise minuciosa de
todo o código.

Nesta Unidade de Aprendizagem, você acompanhará conceitos de depuração, exceções e


tratamento de exceções, além de exemplos práticos sobre o uso de depuração na construção de
scripts em Python.

Bons estudos.

Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:

• Descrever a construção de scripts com a utilização de depuração.


• Discutir formas de tratamento das exceções em Python.
• Apresentar exemplos de scripts que utilizem recursos de depuração.
Desafio
Criar um código, muitas vezes, é uma tarefa complexa; porém, o uso da depuração durante o seu
desenvolvimento evita problemas que possam ocorrer após o código pronto. Quando um código é
criado até o final sem ser analisado antes, pode ser ainda mais difícil encontrar possíveis problemas,
muitas vezes até dobrando o tempo que se levou criando o código, para ajustá-lo.

Assim, considere o seguinte cenário:

Você está auxiliando e avaliando Lucas, estagiário da sua empresa. Ele está começando a programar
em Python e precisou desenvolver um programa para somar três notas referentes às provas
aplicadas semestralmente aos alunos que fazem um curso básico de informática na instituição em
que trabalha e, ao final, dividir as notas atingidas por 3 (número de provas), resultando em uma
média (nota final). As notas devem ser representadas por números reais. O sistema de notas deve
atribuir valores de 0 a 10 para as avaliações dos alunos.

O código criado foi o seguinte:

Lucas entregou a você o trabalho por ele realizado, mas, ao depurar o código criado, você se
deparou com alguns erros:

- O primeiro deles foi um NameError, conforme mostrado a seguir, quando ele tentou rodar o
código:
Traceback (most recent call last):
File "C:/Users/Lucas/PycharmProjects/untitled1/média_alunos.py", line 14, in <module>
printf(notafinal)
NameError: name 'printf' is not defined

- Lucas também resolveu realizar o tratamento do código adicionando uma exceção para o caso de
receber erros no valor inserido. Assim, ele precisa estabelecer que, caso o valor recebido não esteja
dentro do intervalo aceito, retorne uma mensagem de erro; da mesma forma, caso o valor não
seja numérico, deve retornar uma segunda mensagem, que oriente a realizar uma nova declaração
de valores.

Ao observar essas informações, você deve:

a) analisar o código apresentado, ajustando possíveis erros;

b) tratar as exceções mencionadas no enunciado, apresentando um novo código, comentando


sobre as alterações realizadas para resolver os problemas e tratar as condições necessárias para
atender ao objetivo do código.
Infográfico
Diversos erros estão associados à criação de scripts em Python e podem ser identificados durante a
depuração do código. Entre os mais comuns, estão os erros de tempo de execução,
como NameError, TypeError e ValueError, que ocorrem geralmente por alguma ação incorreta
executada pelo usuário referente à entrada de dados não permitida pelo programa.

No Infográfico, conheça alguns eventos que são classificados como erros de tempo de execução e
análise, bem como o ranking de problemas que mais ocorrem em aplicações desenvolvidas em
Python e que podem afetar um programa, mas que podem ser detectados e resolvidos ao depurar
um código em Python.
Aponte a câmera para o
código e acesse o link do
conteúdo ou clique no
código para acessar.
Conteúdo do livro
A depuração é um processo que permite ao programador melhorar suas habilidades na
identificação e na detecção de bugs (erros), tendo, assim, mais facilidade para remover bugs no
código e tratar exceções que atrapalhem a sua execução. Depurar ou debbugar um código é apenas
parte do processo de escrita do código, mas que permite o uso de diferentes abordagens para isolar
o problema. É possível adotar diferentes ações para um mesmo problema e nenhuma delas estar
incorreta.

No capítulo Depuração de scripts com Python, da obra Programação em ambientes de redes de


computadores, base teórica desta Unidade de Aprendizagem, você entenderá como a depuração é
aplicada em Python e de que forma pode ser utilizada da forma mais eficiente para alcançar o
principal objetivo de resolver erros em códigos, tornando a administração mais simples com o uso
de instruções para que isso seja executável.

Boa leitura.
PROGRAMAÇÃO
EM AMBIENTES DE
REDES DE
COMPUTADORES

Fernanda Rosa da Silva


Depuração de scripts
com Python
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Descrever a construção de scripts com a utilização de depuração.


„„ Discutir formas de tratamento das exceções em Python.
„„ Apresentar exemplos de scripts que utilizem recursos de depuração.

Introdução
Quando um programador começa a desenvolver um programa que
se torna extenso, deve consultar e obter diversas informações sobre o
funcionamento parcial do código, durante todo o processo de desen-
volvimento até a sua finalização. A maneira mais simples de fazer essa
verificação com o uso de Python consiste em atribuir prints ao longo
do programa, adicionando informações a respeito do comportamento
de funções e variáveis. Porém, somente o uso dessa função nem sempre
é o suficiente e impõe limites aos termos dessa linguagem, motivo pelo
qual o uso da depuração possibilita maiores interações com o programa,
inspecionando-o com módulos específicos.
Neste capítulo, você analisará a construção de scripts com o uso de
depuração, discutirá formas de tratar exceções em Python e acompanhará
exemplos de casos nos quais a depuração é utilizada.
2 Depuração de scripts com Python

1 Construção de scripts com o uso de depuração


O primeiro passo para criar um código pode ser descrito como a visão de qual
será seu objetivo, sua funcionalidade e como ele se comportará. Para isso,
é necessário conhecer o que está sendo criado, planejar a estrutura do código
e saber como todo o processo será definido. Porém, mesmo assim, enquanto o
código é escrito, ocorrem diversas mudanças, exigindo correções e alterações
para aperfeiçoar o código no decorrer de sua produção.
O programador escreve o código, analisa o resultado e faz alterações
ao longo de todo o percurso sempre que o código não atende à expectativa
desejada. Por isso, quando se fala em depuração do código, considera-se que
esse processo inicia com a tentativa de reproduzir um problema, o que pode
não ser uma tarefa tão fácil. Quando a depuração ocorre, aplicam-se correções
até que o problema seja reduzido à sua essência, facilitando a solução de
forma completa para os erros identificados. Dividir o código e simplificar as
entradas do programa podem facilitar a análise, assim como o uso de módulos
específicos para percorrer o código, isolando a fonte do problema.
De acordo com Zimmerman (2020), a depuração auxilia o desenvolvedor
a se concentrar no que está acontecendo à medida que o código é executado,
o que possibilita que o código seja pausado durante a execução para que seja
possível observar melhor os valores, as variáveis e todos os objetos envolvi-
dos no código naquele momento. O autor ainda aponta alguns itens a serem
considerados, idealizando como realizar a criação do script e usar depuração
em Python da maneira correta, identificando alguns pontos, ações e objetivos
importantes que facilitam o entendimento do ambiente em análise, conforme
a seguir.

„„ Resultado esperado: meta traçada antes de iniciar o desenvolvimento


do código.
„„ Resultado real: o que o programa realmente fez.
„„ Análise: analisar o código antes de realizar qualquer alteração, estu-
dando sua função.
„„ Experiência de depuração: a suspeita do que não está correto no código
e as ações tomadas para tentar corrigir o problema.
„„ Resolução: o que é necessário alterar no código para alcançar o resul-
tado esperado.
„„ Código correto: ao final da depuração, o código estará funcionando
conforme o objetivo inicial atribuído ao programa.
Depuração de scripts com Python 3

A depuração compreende um recurso oferecido pelo próprio compilador


ou interpretador da linguagem utilizada; de forma nativa, é possível depurar
o código por meio de linhas de comando da mesma forma que se escreve e
executa o código. Nos primórdios da depuração, ao utilizar o comando print,
o código já estaria sendo depurado, pois, toda vez em que a saída é enviada,
o valor das variáveis é testado.
O processo de depuração na programação em Python envolve diversas eta-
pas até que se identifique o problema, o que é possível, segundo Gowrishankar
e Veena (2019), ao isolar a origem do problema aplicando a correção com um
depurador.
A seguir, podemos ver o passo a passo que deve ser seguido ao iniciar
o processo de depuração de um código em Python (DOWNEY, ELKNER;
MEYERS, 2015).

„„ Identificar o erro ocorrido, entendendo com que tipo de problema será


necessário lidar para aplicar a correção necessária.
„„ De acordo com a documentação de Python (ERROS..., 2020), esses
erros são retornados por uma função denominada traceback, que
especifica mensagens de erro, auxiliando na identificação de problemas
decorrentes no código, trazendo informações necessárias que facilitem
esse processo, incluindo a sequência de chamadas das funções até o
ponto onde o erro ocorre, o número da linha problemática e o tipo de
erro ocorrido de forma resumida. Portanto, antes do erro, sempre estará
presente o termo traceback. Por exemplo: Traceback (most
recent call last):NameError: name 'printf' is
not defined.
„„ Localizar a linha que apresenta o problema seguindo as instruções do
depurador para iniciar o tratamento correto.
„„ Certificar-se de que não se está fazendo o uso de palavras reservadas
de Python para nomear variáveis, o que pode confundir o próprio pro-
gramador, dificultando a depuração.
„„ Seguir a endentação de forma correta, pois, em casos nos quais o nível
não está adequado, podem ser gerados erros. Endentação constitui o
espaçamento dado em relação ao nível hierárquico do código, tornando-o
legível. Em Python, é feita por meio de blocos de códigos, em que cada
um especifica uma ação dentro dele.
„„ Analisar se as strings estão adequadamente armazenadas por meio de
aspas, sendo terminadas apropriadamente para não gerar erro.
4 Depuração de scripts com Python

„„ Sempre fechar corretamente, assim como as aspas, os conjuntos de


parênteses, colchetes ou chaves para sinalizar que outra declaração
está iniciando.
„„ Após corrigir os erros, executar linha por linha novamente. Para analisar
linhas específicas, breakpoints (pontos de pausa) podem ser adicionados
no decorrer do código.

Assim, depurar um código se resume à inspeção de valores, tipos, argumen-


tos de função e objetos, objetivando corrigir eventuais problemas durante o
desenvolvimento do código. Para isso, existem diversas funções que permitem
identificar gargalos e problemas de tempo de execução, tornando-se importante
ressaltar que essas ferramentas devem ser utilizadas com parcimônia, pois usar
o modo de depuração sem necessidade diminui drasticamente o desempenho
em comparação ao modo de execução.
A seguir, veremos como tratar erros e exceções em Python.

2 Erros e exceções em Python


Mesmo que um comando ou expressão esteja sintaticamente correto, um código
ainda está suscetível a erros durante sua execução, denominados exceções
e que, na maioria das vezes, são problemas que não podem ser resolvidos,
cujo tratamento é possível em programas Python. No entanto, a maior parte
das exceções não é tratada automaticamente pelos programas e o resultado
corresponde ao retorno em forma de mensagens de erro como resposta da
execução do código (ZIMMERMAN, 2020).
Exceções podem ser apresentadas e classificadas com diferentes tipos,
declarados sempre na última linha, indicando o que aconteceu em alguma
parte específica do código. Zimmerman (2020) afirma que a string exibida
como o tipo da exceção é o nome da exceção embutida no código e identifica
sua causa. Já Bhasin (2019) define as exceções como eventos que modificam
o acompanhamento do programa, invocadas quando erros ocorrem e que
podem ser utilizadas para lidar com situações específicas, em qualquer parte
do código, permitindo que o programar trate o problema. A seguir, você pode
observar os erros mais comuns encontrados quando programas em Python
são construídos e quando o processo de depuração ocorre.
Depuração de scripts com Python 5

Erros de sintaxe
De acordo com a documentação de Python (ERROS..., 2020), esse é um dos
erros mais comuns, identificado quando algum ponto (.), dois-pontos (:) ou
até mesmo parênteses (()) estão ausentes em uma expressão:

while True print ('Olá mundo'), quando o correto seria


^

Nesse caso, a linha e o local do erro estão indicadas conforme mencionado.


Retornando o erro:

SyntaxError: Invalid Sintax

O correto para essa operação seria:

while True: print ('Olá mundo')

Erros de execução
Erros denominados runtime (erros de tempo de execução) são facilmente
interceptados pelo compilador e geralmente descrevem problemas que ocor-
rem durante a execução do programa, retornando uma mensagem-padrão e
incluindo informações que se referem à execução do problema e à linha em
que o ocorreu, facilmente gerenciados apenas compreendendo a sintaxe e
aprendendo a alterar o código de acordo com o problema relatado, corrigindo
o comando ou a expressão que estejam escritos de forma incorreta (INTRO-
DUÇÃO..., 2020). Com frequência, isso ocorre quando um comando é escrito
incorretamente ou não existe.
Agora, analise a classificação para possíveis erros em códigos escritos
em Python, de acordo com Zimmerman (2020), e entenda como funciona
o tratamento de erros realizado pela própria linguagem utilizando termos
integrados à sua estrutura.
6 Depuração de scripts com Python

NameError

Ocorre quando se tenta acessar uma variável que não existe ou utilizar um
comando de forma incorreta.
Quando este comando é digitado:

printf('Hello World')

temos um erro de sintaxe, pois o comando printf não é válido em Python;


assim, retornará o seguinte erro:

NameError: name 'printf' is not defined

Ao ajustar, digitando o código corretamente:

print('Hello World')

A operação será executada com sucesso:

Hello World
Process finished with exit code 0

ValueError

Retorna quando uma variável recebe um valor não suportado.


Se, em uma linha de código, uma entrada é solicitada da seguinte forma:

valor = int(input("Digite um número: "))

e o usuário informa um número que não seja inteiro (2,5), ele receberá o
seguinte erro:

ValueError: invalid literal for int() with base 10: '2,5'


Depuração de scripts com Python 7

TypeError

Ocorre quando se tenta usar um valor de forma inadequada, diferentemente


do que foi definido.
Quando o comando a seguir é digitado:

lista = [1, 2, 3]
print(lista['a'])

o seguinte erro retornará, já que somente números podem ser retornados e o


uso do print indica a letra a como termo para imprimir o resultado.

print(lista['a'])
TypeError: list indices must be integers or slices, not str
NameError: name 'printf' is not defined

Ao ajustar, digitando o código corretamente para retornar a lista inteira


composta por numerais:

Lista = [1, 2, 3]
Print(lista)

o resultado é o seguinte:

[1, 2, 3]
Process finished with exit code 0
8 Depuração de scripts com Python

KeyError

Surge quando um elemento acessado em um dicionário utiliza uma chave


inexistente, por exemplo, ao se supor que um dicionário seja criado com a
chave Nome definida e o valor Joao atribuído, mas o usuário procura pela
chave Joao incorretamente, conforme a Figura 1.

Figura 1. KeyError.

Agora veja na Figura 2 o que ocorre quando a busca é realizada de forma


correta.

Figura 2. Valor utilizando chave.


Depuração de scripts com Python 9

IndexError

Quando se tenta acessar um elemento de uma sequência maior do que o número


de elementos representados, pode-se gerar um erro de Index. Na Figura 3, veja
o que acontece quando um valor específico da tupla é printado.

Figura 3. Demonstração de tupla em Python.

Agora veja na Figura 4 o que ocorre quando se tenta acessar o valor 3,


não declarado na tupla.

Figura 4. Exemplo de IndexError — tupla.


10 Depuração de scripts com Python

AttributeError

Surge quando tentamos acessar um atributo ou método que não existe em


um objeto. Na Figura 5, podemos acompanhar o AttributeError (erro
de atributo) ocorrido em uma chamada de lista.

Figura 5. Exemplo de AtributeError.

Embora os erros técnicos sejam comuns para o programador, para o usuário


podem se tornar bastante estranhos, não sendo devidamente entendidos e
até mesmo resultando na perda de sua confiabilidade em relação ao código.
Porém, em casos mais complexos, o programa pode parar de funcionar,
comportando-se de maneira indesejada em virtude do uso incorreto por parte
do usuário, que pode não ter as permissões corretas para abrir ou executar
alguma função específica necessária para que o programa siga adiante, im-
pedindo, assim, que ele funcione adequadamente.
É possível realizar o tratamento de exceções em Python de maneira es-
pecífica, classificando os dados e permitindo que mensagens personalizadas
retornem para o usuário, caso a definição de valores a serem declarados não
seja respeitada.

Suponha que você esteja criando um programa para dividir dois números inseridos
pelo usuário: para isso, você resolve criar uma exceção que deve ser gerada caso o
denominador zero seja inserido, retornando uma mensagem de que o valor não foi
aceito; assim, o código não continuará sendo executado.
Depuração de scripts com Python 11

Depurar um código também pode evitar brechas de segurança, tratando os


erros de sistema para que não se tornem uma ameaça ou porta de entrada para
usuários mal-intencionados. De acordo com Rother (2017), é possível realizar
esse tratamento de erros aplicando exceções em forma de blocos
Cada parte do código, distribuída em blocos, aponta a ação que deve ser
executada e como o código precisa agir ao encontrar uma exceção. A seguir,
veja como isso pode ser feito com o uso de try/except, finaly e raise.

try/except

Essa exceção trata possíveis erros no código, prevenindo que o programa pare
de funcionar e o usuário receba orientações em forma de mensagens de erros,
que retornam de forma inesperada, representando o problema ocorrido durante
a execução do programa. Esse método é empregado em casos de execuções
problemáticas, identificando o que pode ser feito em situações de problemas.
De acordo com Kapil (2019), a instrução try funciona da seguinte maneira:

„„ o conjunto de instruções é criado entre as palavras reservadas try e


except;
„„ se nenhuma exceção for localizada, a cláusula except é ignorada e a
execução do código finalizada pela instrução try;
„„ caso uma exceção seja identificada com a execução da cláusula try,
as instruções não são validadas e o próximo passo consiste em cumprir
o que diz a except;
„„ se nenhum tratamento for possível para a exceção, o programa é en-
cerrado com uma mensagem de erro;
„„ mais de uma cláusula de exceção pode ser especificada para diversos
tratamentos, mas no máximo um tratador será executado, pois, sempre
que um deles representar o ideal para tratar o problema, os demais não
serão necessários.

Podemos resumir os termos try/except da seguinte forma: “tente fazer


isso; em caso de não sucesso, execute isso”.
12 Depuração de scripts com Python

Exemplo

Se dissermos que um programador aperfeiçoou o processo de tratamento das


exceções e indicou que no seu código o tipo de erro NameError será tratado,
qualquer outro erro que incidir no código não será tratado. Na Figura 6, um
comando inexistente é informado gerando um NameError; com o uso de
try/except, o código recebe a orientação de tratar esse erro imprimindo
uma mensagem específica para o usuário.

Figura 6. Tratamento de um erro específico — NameError.

Agora imagine que ele definiu um tratamento para TypeError, que


trata de valores específicos no lugar de funções e comandos. Nesse caso, ao
gerar um NameError, sem o tratamento adequado, a exceção é tratada pelo
próprio interpretador Python, conforme mostra a Figura 7.

Figura 7. Exceção sem tratamento — NameError.


Depuração de scripts com Python 13

raise

Palavra reservada que permite criar as próprias exceções, definindo os va-


lores que são aceitos, configurando mensagens para tratamento de exceções
e imprimindo mensagens personalizadas como retorno em Python; assim,
possibilita que o programador force a ocorrência de determinado tipo de
exceção (ERROS..., 2020).
A Figura 8 mostra um exemplo no qual o usuário deve digitar um texto
e definir a cor em que será impresso entre as permitidas, sendo, ainda, uma
string (valor representado por caracteres). Caso o valor não seja uma string,
a mensagem “Cor/texto deve ser uma string” é impressa; se a cor não fizer
parte do escopo estabelecido, ele recebe a mensagem “A cor precisa ser uma
entre (lista de cores)”.

Figura 8. Uso de raise.

finally

Pouco utilizado, tem a função de apenas encerrar a execução de um código


utilizado uma última expressão (ERROS..., 2020). No caso do exemplo a seguir,
somente o uso do print ao final do script teria a mesma funcionalidade.
14 Depuração de scripts com Python

try:
num= int(input(' Informe um número: '))
except ValueError:
print (' Você não digitou um valor válido.')
else:
print ('Você digitou o número (num)')
finally:
print ('fim da execução')

Geralmente, essa condição é utilizada em ambientes de banco de dados, nos quais,


após realizar o uso da base, a conexão deve ser fechada, uma ação tomada pelo
próprio finally.

Identificar erros no código constitui o primeiro passo para garantir a funcio-


nalidade de um programa não seja afetada, e tratar erros com o uso de exceções
e ações personalizadas facilita a interação do usuário com o programa criado
e o entendimento de falhas para que sejam contornadas com a declaração
correta de valores. No próximo tópico, você verá alguns exemplos do uso de
depuração em Python.

3 Exemplificação do uso de depuração


em Python
Geralmente, desenvolvedores recorrem a instalação de Integrarted Develo-
pment Environment (IDE), um programa que reúne ferramentas para desen-
volvimento de software, pesadas para realizar debugging, mas quando se diz
respeito à linguagem Python, isso pode ser feito com o uso de duas ferramentas
analisadas a seguir, com alguns exemplos de uso.
Acompanhe o script em Python da Figura 9, em que dois números são
divididos e o resultado, apresentado. Porém, quando um dos números é zero
ou o valor declarado não é um número inteiro, o usuário recebe o seguinte
erro: ‘Ocorreu um problema’.
Depuração de scripts com Python 15

Nesse cenário, o Python e o PyCharm foram instalados no Ubuntu cliente


20.04, utilizado no modo de interface gráfica (considere o uso do Python 3.7).

Figura 9. Exemplo de script no Python.

Nesse caso, o código está sendo depurado com o uso do comando print,
mas esta não é considerada uma boa prática, por ser utilizada nos primórdios
da depuração, quando ainda não existiam outros recursos. Por isso, veja agora
como realizar a depuração utilizando métodos específicos que tornaram a
depuração mais sofisticada e simples.

PyCharm
Trata-se de uma plataforma suportada por múltiplos sistemas operacionais,
como Windows, MacOS e Linux, desenvolvida pela JetBrains para facilitar a
análise de um código, com recursos como depurador gráfico, autocompletar
e capacidades que facilitam a navegação e a escrita do código, trazendo mais
eficiência e rapidez (INTRODUÇÃO..., 2020).
Embora a Figura 10 seja a mesma demonstrada anteriormente, agora a
observaremos para iniciar a depuração com o uso do PyCharm.
Verifique que nas linhas 30 e 32 foram adicionados dois breakpoints (pontos
de parada que permitem analisar como os dados estão sendo recebidos pelo
código, durante uma pausa, em que a depuração é iniciada e retorna possíveis
erros ou segue com a execução até o próximo ponto após a ação por parte do
programador).
16 Depuração de scripts com Python

Figura 10. Exemplo de uso do PyCharm.

Agora, para realizar o debug, selecionaremos com o botão direito a opção


debug, que aparecerá seguida do nome dado ao seu código (Figura 11).

Figura 11. Debug com PyCharm.

Na sequência, o PyCharm marcará a linha na qual a primeira pausa será


realizada e executará o debug informando o valor das suas variáveis como
retorno, parando nesta linha até que se siga com o debug. Assim, é possível
analisar os valores recebidos cerificando-se de que nenhum erro tenha ocorrido
(Figura 12).
Depuração de scripts com Python 17

Figura 12. Debug e breakpoint no PyCharm.

Para visualizar o resultado da divisão, deve-se selecionar somente as va-


riáveis int(a) e int(b) e a opção Add to Watches, como mostrado na
Figura 13.

Figura 13. Adição de variáveis ao código no PyCharm.


18 Depuração de scripts com Python

Para alternar entre as linhas durante o debug, a tecla F8 pode ser utilizada, o que se
aplica a qualquer sistema operacional, uma vez que o atalho é atribuído à interface
do próprio Python/PyCharm.

Agora, vamos considerar a except criada, na qual o valor 0 não deve ser
aceito, retornando um ValueError. Para isso, vamos gerar o erro informando
uma divisão de valores incorreta, como demonstrado na Figura 14.

Figura 14. except — ValueError.

Perceba, conforme a Figura 15, que um erro retornará, informando que o


valor 0 não é recebido para ser declarado e que ocorreu um problema durante
a execução do código.
Depuração de scripts com Python 19

Figura 15. Erro ao executar try-except identificado pelo PyCharm.

O uso do PyCharm permite uma visão clara sobre os erros, com interface
amigável, painel customizado e atalhos que facilitam o uso dos recursos em
Python, depurando o código com facilidade e identificando cada linha de
forma detalhada, ainda mais quando breakpoints são usados corretamente,
aperfeiçoando a análise do código.

PDB (Python Debbuger)


Diferentemente do PyCharm, o módulo PDB (Python Debbuger) compreende
um depurador cuja principal característica reside no fato de ser um código-fonte
interativo utilizado em programas Python suportando o uso de condicionais e
a verificação de nuvem de linhas, a inspeção de quadros de pulha e a listagem
de código-fonte — assim, praticamente tudo é feito de modo manual. Garcia
(2015) aponta que é possível realizar com um step-by-step (passo a passo),
verificando o valor de variáveis, definindo breakpoints e manipulando valores,
da mesma forma que o PyCharm.
Na Figura 16, há um exemplo criado no Python 3.7 instalado no Windows 10,
no qual o código recebe os valores de nome e sobrenome nas variáveis criadas
e o nome do curso em que o aluno está matriculado.
20 Depuração de scripts com Python

Figura 16. Exemplo com PDB — Python Debbuger.

Suponha que você queira adicionar um breakpoint; para isso, é necessário


adicioná-lo manualmente utilizando o comando pdb.set_trace() no local
desejado conforme a Figura 17. Ao executar o código, você pode ver qual será
a próxima linha a ser executada.

Figura 17. Breakpoint no Python Debbuger.

A seguir, podemos observar alguns comandos básicos (atalhos) para ma-


nipular o script no Python. Vale ressaltar que é importante acionar todos os
atalhos no modo de depuração.
Depuração de scripts com Python 21

Comando que lista todo o código, apontando para a próxima linha que será
executada no código, conforme a Figura 18.

Figura 18. Listagem da linha atual do código.

Para retornar o valor de uma variável a qualquer momento, basta digitar


a variável, também no modo de depuração (Figura 19).

Figura 19. Listagem da variável nome.


22 Depuração de scripts com Python

Porém, não é possível imprimir manualmente uma variável que esteja


localizada após o breakpoint e que ainda não tenha sido lida, por exemplo,
nome_completo, como mostrado na Figura 20.

Figura 20. NameError — breakpoint — PDB.

n (ir para a próxima linha)

Agora, observe que, ao rodar a próxima linha do comando utilizando o comando


n, é possível chamar a variável nome_completo que havia apresentado erro
anteriormente (Figura 21).

Figura 21. Atalho para a próxima linha.


Depuração de scripts com Python 23

Esse comando continua a execução — finaliza o debugger (Figura 22).

Figura 22. Finalização da execução do debugger.

O debug do código é utilizado durante o desenvolvimento do código, sendo


removido ao finalizar, deixando o código mais limpo após a finalização de
todos os testes. As ferramentas de depuração facilitam o processo de análise
e correção de erros no código de qualquer linguagem, o que não é diferente
ao programar em Python.
Em resumo, podemos concluir que a depuração é um processo essencial
durante a manipulação do código, reduzindo drasticamente defeitos de uma
aplicação, erros de software e prevenindo que eles produzam resultados ines-
perados. Além disso, o tratamento correto de exceções possibilita aperfeiçoar
o desenvolvimento do código, melhora a interação com o usuário e promove
um melhor gerenciamento do código quando ele estiver em produção.
Empregar as ferramentas adequadas para obter recursos completos durante
esse processo torna o processo simples e mais assertivo, podendo facilitar a
visualização dos erros em menos tempo, mantendo um padrão de análise e
garantindo que o código esteja em funcionamento o mais rápido possível.
24 Depuração de scripts com Python

BHASIN, H. Python basics: a self-teaching introduction. Dulles: Mercury Learning and


Information, 2019. 450 p.
DOWNEY, A.; ELKNER, J.; MEYERS, C. Depuração em Python. In: DOWNEY, A.; ELKNER,
J.; MEYERS, C. Aprenda computação com Python 2. New Delhi: Dreamtech; Wellesley:
Green Tea, 2015. Apêndice A. Disponível em: [Link]
pt/latest/apendice_a.html#apendice-a-depuracao. Acesso em: 24 jul. 2020.
ERROS e exceções. In: O TUTORIAL Python. Fredericksburg: Python Software Foun-
dation, 2020. Disponível em: [Link]
Acesso em: 24 jul. 2020.
GARCIA, D. Debugging em Python sem IDE. Python Club, [S. l.], 15 fev. 2015. Disponível
em: [Link] Acesso em:
24 jul. 2020.
GOWRISHANKAR, S.; VEENA, A. Introduction to Python programming. Boca Raton: CRC
Press, 2019. 444 p.
INTRODUÇÃO ao PyCharm. In: PYTHON e orientação a objetos: curso PY-14. São Paulo:
Caelum Escola de Tecnologia, 2020. p. 39–45. Disponível em: [Link]
[Link]/apostila-python-orientacao-a-objetos/introducao-ao-pycharm. Acesso em:
24 jul. 2020.
KAPIL, S. Clean Python: elegant coding in Python. Sunnyvale. New York: Apress. 2019.
267 p.
ROTHER, K. Pro Python best practices: debugging, testing and maintenance. New York:
Apress, 2017. 264 p.
ZIMMERMAN, R. L. Python debbuging handbook. Independent, [S. l.:] Edição do autor,
2020. 208 p.

Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.
Dica do professor
Assim como existem boas práticas para iniciar o desenvolvimento de um código, o mesmo ocorre
quando se trata do modo de depuração. Estar atento aos detalhes, utilizando os recursos de
debug, é importante, mas existem ações básicas que devem ser tomadas em termos de organização
e lógica. Assim, mesmo antes de depurar um código, é possível minimizar os erros que podem
incidir durante a criação do programa.

Nesta Dica do Professor, acompanhe algumas práticas que podem auxiliar durante esse processo,
tornando cada tarefa mais fácil de ser realizada e trazendo uma visão mais clara do que deve ser
aplicado ou corrigido ao debugar um código em Python.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Exercícios

1) É muito comum que erros sejam identificados em códigos, por mais que o programador
tenha conhecimento na linguagem, pois, à medida que vai sendo criado, o código se torna
mais complexo, dificultando a identificação de falhas. Os erros são classificados em diversos
tipos, que definem os problemas que são capazes de identificar durante a contrução de um
código.

Considere as seguintes afirmações e classifique-as como verdadeiras (V) ou falsas (F):

( ) NameError ocorre durante a execução do código quando uma variável ou nome de


função é digitado incorretamente, como uso de uma variável não definida ou algum nome
que deveria estar entre aspas e está incompleto.
( ) TypeError em Python tem como causa o uso de sequências em um formato
que corresponda ao número correto de valores definidos de forma sequencial na variável,
mas que correspondem a caracteres não aceitos pelo código.
( ) Quando um objeto armazenado em formato de chave é requisitado e não existe, um
KeyError retorna informando que o valor não existe.
( ) Quando existem quatro elementos em uma lista e se tenta acessar o índice de posição “4”
na sequência, um Index Error ocorre, visto que, nesse caso, somente existem os elementos
identificados como (0,1,2,3).
( ) AtributteError ocorre quando um atributo existe em um objeto, mas não está entre aspas;
além disso, esse tipo de erro não é considerado um erro de tempo de execução.

Assinale a alternativa que indica a sequência correta:

A) F - V- V - V - V.

B) F - V - V - V - F.

C) F - V - V - F - F.

D) V - F - V - V - F.

E) V - F - V - F - F.

2) O Python só é capaz de executar um programa quando o código está sintaticamente


correto. Entretanto, é possível adicionar exceções que tratam os erros que são causados
pela entrada de dados. Correção de erros e criação de uma estrutura de código contendo
exceções adequadas são primordiais para o seu funcionamento.
Sobre os erros e o tratamento de exceções em Python, considere as seguintes afirmações:

I. O tratamento de exceções oferece uma comunicação melhor entre o usuário e a interface


do código, pois nem sempre o usuário entende erros internos, que são comuns ao
programador, mas que podem ser complexos em sua visão.

II. TRY e EXCEPT são condições que trabalham juntas formando um conjunto de instruções
criadas, respectivamente, para tentar executar o código e tratar erros, aplicando uma ação
definida para aquele erro específico.

III. Ao utilizar TRY e EXCEPT, a segunda é responsável por identificar se o programa está
executando corretamente, e a primeira é a cláusula que tenta novamente a mesma ação caso
ela não funcione na primeira tentativa.

IV. Depurar um código em Python exige instalação de funções específicas que dependem
diretamente do erro que será tratado para que o código possa identificar o tratamento de
uma exceção específica sempre que necessário.

V. Ao utilizar a palavra reservada raise em um código Python, é possível definir suas próprias
exceções e valores que podem ser recebidos dentro de uma variável, definindo também
determinada circunstância para o tipo de exceção.

Qual alternativa apresenta somente afirmações corretas?

A) I, II e IV estão corretas.

B) I, II e V estão corretas.

C) III, IV e V estão corretas.

D) I, III e IV estão corretas.

E) I e V estão corretas.

3) Um dos recursos oferecidos tanto pelo Pycharm como pelo PDB, ferramentas de depuração,
é denominado Breakpoint, utilizado em Python para depuração, auxiliando na identificação
de erros e na inserção de exceções no código.

Sobre o Breakpoint, qual das alternativas descreve sua função?

A) Breakpoint é um ponto de parada que interrompe completamente o código, direcionando sua


execução para a última linha, mesmo que nenhuma exceção tenha ocorrido até a linha onde
ele está localizado.
B) Breakpoint é um ponto de pausa que permite que o código seja pausado em uma única linha
do código, possibilitando que o próprio usuário defina uma exceção para tratar problemas
ocorridos antes da definição do ponto.

C) Um Breakpoint define, na depuração de programas, o número da linha em que a execução do


código será interrompida para o início da depuração. Breakpoints podem ser distribuídos ao
longo do código, tantos quantos forem necessários.

D) Apesar de Breakpoint significar "ponto de pausa", o código não é interrompido, apenas marca
as linhas onde a depuração deve ocorrer e, no final da execução do código, apresenta o
resultado para cada linha sequencialmente.

E) Breakpoint é a categoria que define ferramentas como PDB e Pycharm e se refere a todas as
funções da depuração, erros e exceções que podem ocorrer em um código Python.

4) Quando um código começa a ser desenvolvido, ele vai se tornando longo, à medida que
linhas são adicionadas e funções são atribuídas a ele.

Considere as afirmações sobre a construção de scripts em Python com o uso de depuração:

I. Planejar a estrutura do código antes de iniciá-lo, listando suas funções e objetivos


esperados com a execução, é o primeiro passo para facilitar a construção do script e
reduzir pontos a serem verificados com a depuração durante seu desenvolvimento.

II. O Python realiza o tratamento de erros de forma integrada, porém é possível tratar
exceções com o uso de depuração, além de criar exceções próprias adaptando o código
a possíveis erros que possam ocorrer durante a execução.

III. Não é permitido aplicar a depuração de forma fracionada durante a criação do código,
analisando linha por linha, sem que ele não tenha sido finalizado. A depuração deve ser
iniciada após finalização do código completo para que funcione corretamente.

IV. Depurar é o ato de corrigir, aperfeiçoar e alterar funções e variáveis do código durante
seu desenvolvimento, identificando prováveis erros e ajustando-os com o uso de técnicas
específicas.

V. Traceback é um recurso do Python que retorna mensagens de sucesso quando o código


finaliza sua execução sem nenhum erro e deve ser previamente ativo para que dê o retorno
esperado.

As afirmações corretas são:

A) I, II e V.
B) II, IV e V.

C) II, III e IV.

D) I, II e IV.

E) I, III e V.

5) Depuração pode ser um processo bem complexo, assim como os problemas que ocorrem no
código e que podem fazer com que ele pare de funcionar, apresentando resultados
indesejados devido ao uso incorreto da sua função, muitas vezes por parte do usuário.

Considerando essa informação, acompanhe a declaração a seguir:

Esses erros podem ser causados pelo fato de o usuário que executa o script em Python não
ter _________, o que impede que ele funcione adequadamente. Porém, é possível tratar as
_________de forma específica, como o desenvolvedor achar melhor, classificando os dados e
retornando _________ apropriadas para facilitar o entendimento do usuário sobre o(a)
_________ cometido(a).

As lacunas devem ser preenchidas, respectivamente, por:

A) permissões necessárias, causas, mensagens, falta.

B) conhecimento necessário, exceções, funções, erro.

C) conhecimento, causas, as linhas, falta.

D) acesso, linhas do código, soluções, desacerto.

E) permissões necessárias, exceções, mensagens, erro.


Na prática
Depurar um script em Python nem sempre é um processo engessado. Cada cenário e cada código
que tenha uma funcionalidade atribuída exigem uma visão específica e deve ser analisados da
forma correta, seguindo o passo a passo, avaliando qualquer linha, até que o problema seja
resolvido.

Acompanhe, neste Na Prática, um caso em que Joana criou um script e precisou analisar erros que
foram aparecendo no decorrer desse processo.
Aponte a câmera para o
código e acesse o link do
conteúdo ou clique no
código para acessar.
Saiba +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor:

Introdução ao Pycharm
Este artigo descreve brevemente o Pycharm e alguns atalhos que facilitam a manipulação do código
no ambiente, demonstrando como realizar o download e algumas características da ferramenta.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Depuração Python
Este artigo expõe de forma mais detalhada os erros de sintaxe, algumas situações corriqueiras que
podem ocorrer no Python e dicas para resolver esses problemas, bem como dúvidas que podem
surgir durante a depuração de um código em Python.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Você também pode gostar