Eu escrevi muitos scripts Python usando ArcPy no ArcGIS 10, e até agora meu único meio de depuração é restrito à impressão de mensagens na janela de resultados de geoprocessamento usando arcpy.AddMessage()
.
Existem outras opções por aí, como definir pontos de interrupção?
O método de Jason funciona muito bem. Se você tiver um bug na sua caixa de ferramentas, como a validação, o IDE provavelmente não poderá identificar o problema porque as caixas de ferramentas são codificadas. Pelo menos a WING não conseguiu identificá-lo.
arcpy
arcgis-10.0
debugging
Curtidor
fonte
fonte
Respostas:
Geralmente, os depuradores / IDEs do Python assumem que o script Python está sendo executado no mesmo processo que o próprio, portanto, a depuração de um script executado no ArcMap.exe está correta - você precisa obter o suficiente do ambiente de script GP inicializado em um script Python para poder depurar com.
Um método que funcionou muito bem para mim nos últimos anos é escrever um script simples que apenas chame a ferramenta e use-o como meu script principal no IDE do Python (Wing ou Pythonwin) e tenha meus pontos de interrupção definidos no arquivo .py da ferramenta O arquivo também é aberto na mesma sessão do IDE.
Então, basicamente, eu faço isso:
E meu script de chamada geralmente é bem simples:
Eu tentei o winpdb para depurar scripts em execução no ArcMap, mas nunca tive sorte. Se você quiser experimentá-lo e fazê-lo funcionar bem, compartilhe suas descobertas.
fonte
Você pode alterá-lo na caixa de diálogo Opções do GP, apenas aponte para o executável de sua escolha para editor / depurador.
fonte
Para usuários de 10 anos, claramente o melhor caminho a seguir é o post de Jason, que marquei como a "melhor resposta". Para os usuários da versão 9.3, fui capaz de seguir as instruções de suporte da ESRI KB vinculadas na postagem de Brad para fazê-lo funcionar.
Por fim, a chave para obter a edição padrão dos scripts python do ArcGIS no Pyscripter foi editar a "ação" do sistema para "tipos de arquivos registrados" que terminam em arquivos * .py (etapa 4). Criei um novo tipo de ação "Editar" e incluí o caminho do Pyscripter.exe. Depois disso, a ação de edição padrão foi configurada para iniciar o Pyscripter em vez do IDLE.
A string que usei (porque foi cortada na caixa de diálogo mostrada abaixo) é:
fonte
Não sei como isso funcionará com o arcpy, mas você pode tentar o pdb :
fonte
A maneira mais direta que encontrei para depurar meu código é codificar minhas entradas no caminho de arquivo de um conjunto de dados existente. Por exemplo:
Além da janela de resultados, a janela python gera mensagens de erro úteis e / ou permite testar trechos de código.
Qualquer bom IDE possui um probe de depuração que terá, na memória, todo o seu processamento até o ponto de interrupção atual. Com isso, você pode ver o que está acontecendo com os dados. Defina pontos de interrupção nos quais deseja pausar o script. Use pontos de interrupção condicionais se desejar parar um loop em uma iteração específica. Além disso, conheça suas versões do Arc e quais funções estão disponíveis para essas versões.
fonte