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?

Author: codeforester, 2011-02-08

11 answers

Sim! Há um depurador Python chamado {[[0]} só por fazer isso!

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.

Algumas úteis para lembrar São:
  • 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.

 176
Author: Rovin Bhandari, 2014-02-06 14:19:02

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

  1. Executar a próxima declaração ... com " n " (seguinte)

  2. Repetir o último comando de depuração... com ENTER

  3. Sair de tudo ... com "q" (sair)

  4. Imprimir o valor das variáveis ... com " p " (print)

    A) p a

  5. Desligar a linha de comandos (Pdb) ... com " c " (continuar)

  6. Vendo onde estás ... com"l" (lista)

  7. Entrar em sub-rotinas ... com " s " (passo em)

  8. Continuando ... mas só até ao fim da sub-rotina actual ... com " r " (Retorno)

  9. Atribuir um novo valor

    A) !B = "B"

  10. 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

  11. Ponto de paragem temporário

    A) Número de linha dobreak

  12. 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://pymotw.com/2/pdb/

Https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/

 34
Author: akD, 2016-08-25 09:38:01

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'.

 31
Author: Senthil Kumaran, 2011-02-08 03:24:35

Se você vem de Java / C# background, acho que a sua melhor aposta seria usar Eclipse com Pydev . Isto dá-lhe uma IDE totalmente funcional com o depurador incorporado. Também o uso com o django.

 3
Author: Liorsion, 2012-01-20 15:24:54

Se quiser um IDE com depurador integrado, tente o arranha-céus .

 2
Author: kindall, 2011-02-08 03:52:44

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.

 2
Author: Eugene Yarmash, 2018-08-27 13:47:36

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.

 1
Author: Sandeep Datta, 2014-04-12 09:58:15
 1
Author: Aaron Hoffman, 2014-08-19 18:50:21

Https://wiki.python.org/moin/PythonDebuggingTools

O PDB é um bom substituto do pdb

 1
Author: Neil, 2015-08-26 13:32:09

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.

Screenshot

 0
Author: jim, 2018-07-19 21:05:40

Você pode olhar para depurador python que faz exatamente o que você está procurando apenas não através de uma interface gráfica

 -1
Author: Nigel, 2011-02-08 03:26:45