我已经在ArcGIS 10中使用ArcPy编写了许多Python脚本,到目前为止,我唯一的调试方法仅限于使用来将消息打印到地理处理结果窗口arcpy.AddMessage()
。
还有其他选项,例如设置断点吗?
杰森的方法效果很好。如果您的工具箱中有错误(例如验证),则IDE可能无法查明问题,因为工具箱已编码。至少WING无法查明。
我已经在ArcGIS 10中使用ArcPy编写了许多Python脚本,到目前为止,我唯一的调试方法仅限于使用来将消息打印到地理处理结果窗口arcpy.AddMessage()
。
还有其他选项,例如设置断点吗?
杰森的方法效果很好。如果您的工具箱中有错误(例如验证),则IDE可能无法查明问题,因为工具箱已编码。至少WING无法查明。
Answers:
通常,Python调试器/ IDE假定Python脚本与其本身在同一进程中运行,因此调试在ArcMap.exe中运行的脚本是正确的-您需要获取足够的Python脚本引导的GP脚本环境。调试。
在过去几年中对我来说效果很好的一种方法是编写一个简单的脚本,该脚本仅调用该工具并将其用作我在Python IDE(Wing或Pythonwin)中的主要脚本,并在该工具的.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中运行的脚本,但是我从来没有碰运气。如果您想尝试一下并使其正常运行,请分享您的发现。
您可以从“ GP选项”对话框中对其进行更改,只需指向编辑器/调试器选择的可执行文件即可。
对于10岁以下的用户,显然最好的选择是Jason的帖子,我将其标记为“最佳答案”。对于9.3的用户,我能够按照Brad帖子中链接的ESRI KB支持说明进行操作。
最终,要在Pyscripter中默认编辑ArcGIS python脚本,关键是要编辑以* .py文件结尾的“已注册文件类型”的系统“操作”(步骤#4)。我创建了一个新的“编辑”操作类型,然后包含了Pyscripter.exe路径。完成此操作后,将默认的编辑操作设置为启动Pyscripter而不是IDLE。
我使用的字符串(因为它在下面显示的对话框中被截断了)是:
"C:\Program Files\PyScripter\PyScripter.exe" "%1"
我不知道如何在arcpy中使用它,但是您可以尝试pdb:
import pdb; pdb.set_trace()
我发现调试代码最直接的方法是将输入的内容硬编码到现有数据集的文件路径中。例如:
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版本以及这些版本可以使用的功能。