我已经在ArcGIS 10中使用ArcPy编写了许多Python脚本,到目前为止,我唯一的调试方法仅限于使用arcpy.AddMessage()将消息打印到地理处理结果窗口。

还有其他选项,例如设置断点吗?

Jason的方法效果很好。如果您的工具箱中有错误(例如验证),则IDE可能无法查明问题,因为工具箱已编码。至少WING无法查明。

评论

也许这里有选择?代码谷歌pyscripter

ArcGIS帮助讨论了如何在PythonWin中使用调试器

在OS文件属性中,您是否尝试过将.py文件的默认程序设置为PyScripter?

通过这样做,我是否不能有效地告诉操作系统我不想运行我的python脚本,而只是在编辑器中打开它?

是,对的。抱歉,我误解了您的目的。

#1 楼

通常,Python调试器/ IDE假定Python脚本与其本身在同一进程中运行,因此调试在ArcMap.exe中运行的脚本是正确的-您需要获得足够的Python脚本引导的GP脚本环境。

过去几年中对我非常有效的方法是编写一个简单的脚本,该脚本仅调用该工具并将其用作我在Python IDE(Wing或Pythonwin)中的主要脚本。 ),并在同一IDE会话中也打开了在工具的.py文件中设置的断点。

所以基本上我可以这样做:


获取在我的脚本工具中无法使用的输入
在与调用该工具的.tbx相同的文件夹中打开一个简单的.py文件
在该脚本中打开调用者脚本和脚本工具.py文件IDE
在脚本工具文件中设置断点
运行调用者脚本

我的调用者脚本通常非常简单:

import os
import arcpy
arcpy.ImportToolbox(os.path.join(os.path.dirname(__file__), 'my.tbx'))
arcpy.MyToolThatIsFailing_myalias("inputs", "that", "don't" "work")


我尝试用winpdb进行调试脚本在ArcMap中运行,但我从未有过运气。如果您想尝试一下并使其正常运行,请分享您的发现。

评论


不错的解决方案!我会试试看。

–乔治·席尔瓦(George Silva)
2011年3月2日在20:12

过去,我已成功使用winpdb调试长进程脚本。一旦设置好winpdb,您就可以“跳入”当前正在运行的独立脚本,或者理论上可以在另一个进程(例如ArcMap)中“跳入”并正常调试。这对于签入需要数周时间才能完成的脚本非常方便。我没有尝试在ArcGIS应用程序进程中调试arcpy。

–blah238
2011-3-3在4:47

我会推荐PyCharm。它像魔术一样工作

–user39901230
2011年4月4日在21:26

#2 楼

您可以从GP选项对话框中对其进行更改,只需指向编辑器/调试器的可执行文件即可。



评论


这看起来是ArcGIS 10的一项新增强功能,对吗?我看不到9.3的此设置选项。

– RyanKDalton
2011年4月7日在20:25

正确,是10中的新功能。

–Jason Scheirer
2011-4-7 20:33



#3 楼

对于10岁以下的用户,显然最好的选择是Jason的帖子,我将其标记为“最佳答案”。对于9.3的用户,我能够按照Brad帖子中链接的ESRI KB支持说明进行操作。

最终,要在Pyscripter中默认编辑ArcGIS python脚本,关键是要编辑以* .py文件结尾的“已注册文件类型”的系统“操作”(步骤#4)。我创建了一个新的“编辑”操作类型,然后包含了Pyscripter.exe路径。完成此操作后,将默认的编辑操作设置为启动Pyscripter而不是IDLE。

我使用的字符串(因为它在下面的对话框中被截断了)是:

"C:\Program Files\PyScripter\PyScripter.exe" "%1"




评论


+1,如果可以的话,再一次,因为包括字符串而不只是图像(文本更容易复制和粘贴!)。

–马特·威尔基
2011-09-20 22:39

#4 楼

我不知道如何在arcpy中使用它,但是您可以尝试使用pdb:

import pdb; pdb.set_trace()


评论


带有eclipse的pydev也有类似的功能,在此进行介绍。您可以将eclipse设置为侦听信号,然后可以通过pydevd.settrace()函数调用在完全在eclipse外运行的代码中触发该信号。 urbansim.org/Documentation/DebuggingWithEclipse

–ako
11年7月29日在6:14



#5 楼

我发现调试代码的最直接的方法是将输入的内容硬编码到现有数据集的文件路径中。例如:

import arcpy

# parameters for script
#input1 = arcpy.GetParameterAsText(0) # layer
#input2 = arcpy.GetParameterAsText(1) # folder

# debugging parameters
input1 = r"path/to/your/data.shp"
input2 = r"path/to/your/folder"


除了结果窗口外,python窗口还会产生有用的错误消息和/或允许您测试代码段。

任何优秀的IDE都具有调试探针,该探针将在内存中包含直至当前断点的所有处理。这样,您可以查看数据的状态。在要暂停脚本的位置设置断点。如果要在特定的迭代中停止循环,请使用条件断点。另外,了解您的Arc版本以及这些版本可以使用的功能。