Pode passar pelo código python para ajudar a depurar problemas?
em java / C# você pode facilmente passar através de código para rastrear o que pode estar indo errado, e IDE faz este processo muito amigável.
Consegues rastrear o código python de forma similar?11 answers
Você pode lançar um programa Python através de pdb
usando pdb myscript.py
ou python -m pdb myscript.py
.
Existem alguns comandos que você pode então emitir, que estão documentados no pdb
page.
-
b
: definir um ponto de paragem -
c
: continue a depuração até atingir um ponto de paragem -
s
: passo através do Código -
n
: para ir para a linha seguinte do Código -
l
: lista do código-fonte do ficheiro actual (por omissão: 11 linhas, incluindo a linha a ser executada) -
u
: navegar por uma pilha de Dados -
d
: navegar por uma pilha de Dados -
p
: para imprimir o valor de uma expressão no contexto actual
Se não quiser usar um depurador de linha de comandos, alguns IDEs como O Pydev têm um depurador de interface gráfica.
Usando o depurador interactivo Python ' pdb '
O primeiro passo é fazer com que o interpretador Python entre no modo de depuração.
A. Da Linha de comando
O caminho mais para a frente, a correr da linha de comandos, do interpretador de python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. dentro do intérprete
Ao desenvolver versões iniciais de módulos e experimentá-lo de forma mais iterativa.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. De Dentro Do Seu Programa
Para um grande projeto e módulo de longa duração, pode iniciar a depuração de dentro do programa usando import pdb e set_ trace () assim:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Depuração passo-a-passo para entrar em mais interno
Executar a próxima declaração ... com " n " (seguinte)
Repetir o último comando de depuração... com ENTER
Sair de tudo ... com "q" (sair)
-
Imprimir o valor das variáveis ... com " p " (print)
A) p a
Desligar a linha de comandos (Pdb) ... com " c " (continuar)
Vendo onde estás ... com"l" (lista)
Entrar em sub-rotinas ... com " s " (passo em)
Continuando ... mas só até ao fim da sub-rotina actual ... com " r " (Retorno)
-
Atribuir um novo valor
A) !B = "B"
-
Definir um ponto de paragem
A) quebra o número de linha
B) break functionname
C) quebrar o nome do ficheiro:número de linha
-
Ponto de paragem temporário
A) Número de linha dobreak
-
Ponto de paragem condicional
A) quebra o número de linha, condição
Nota: * * Todos estes comandos devem ser executados a partir de * * pdb
Para aprofundar conhecimento, ver: -
Https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Existe um módulo chamado 'pdb' em python. No topo do seu script python você faz
import pdb
pdb.set_trace()
E entrarás no modo de depuração. Você pode usar' s 'para avançar,' n ' para seguir a linha seguinte semelhante ao que você faria com o depurador 'gdb'.
Se quiser um IDE com depurador integrado, tente o arranha-céus .
Começando no Python 3.7, você pode usar o breakpoint()
função incorporada para introduzir o depurador:
foo()
breakpoint() # drop into the debugger at this point
bar()
Por omissão, breakpoint()
irá importar pdb
e chamar pdb.set_trace()
. No entanto, você pode controlar o comportamento de depuração via sys.breakpointhook()
e utilização da variável ambientePYTHONBREAKPOINT
.
VerPEP 553 para mais informações.
Programaticamente pisar e rastrear através do código python também é possível (e é fácil!). Olha para o sistema .settrace () documentação para mais detalhes. Também aqui é um tutorial para começar.
Https://wiki.python.org/moin/PythonDebuggingTools
O PDB é um bom substituto do pdb
O PyCharm é um IDE para o Python que inclui um depurador. Veja este vídeo do YouTube para uma introdução sobre o uso do depurador de PyCharm para passar pelo código.
Tutorial do PyCharm-depurar o código python usando o PyCharm
Nota: Isto não se destina a ser um endosso ou uma revisão. PyCharm é um produto comercial que se precisa pagar, mas a empresa fornece uma licença gratuita para estudantes e professores, bem como uma versão comunitária "leve" que é livre e código aberto.
Você pode olhar para depurador python que faz exatamente o que você está procurando apenas não através de uma interface gráfica