调试 Python 代码

Python 用于 ArcGIS Pro 应用程序的很多部分。 集成开发环境 (IDE) 是为代码程序员提供编辑和调试功能的应用程序。 IDE 有助于提高代码编写和故障排除的高效性。 Python IDE 可用于制作和故障排除脚本工具以及 Python 工具箱验证和执行代码。

Microsoft Visual Studio

以下 ArcGIS Pro 组件可在 Visual Studio 中调试:

  • 脚本工具执行
  • 脚本工具验证
  • Python 工具箱

必须安装以下 Visual Studio Workload:Python 开发。 请参阅 https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio

要在 ArcGIS Pro 中开始调试 Python 代码,请使用以下步骤:

  1. ArcGIS Pro 中,打开要调试工具的地理处理窗格。

    Python 窗口和任何 Notebooks 必须关闭。

  2. 启动 Microsoft Visual Studio 并打开要调试的脚本。
  3. 在主菜单上单击调试 > 连接到进程
  4. 连接到进程对话框中,单击选择按钮。
  5. 选择代码类型对话框中,相继选中调试这些代码类型Python,然后单击确定

    您必须选择附加到:Python 代码。 请勿使用默认代码类型自动:托管(v4.6、v4.5、v4.0)代码、Python 代码

  6. 在可用进程列表中,单击 ArcGISPro.exe 进程,然后单击附加按钮。
  7. 运行 ArcGIS Pro 中的工具开始调试。

将 IDE 与 ArcGIS Pro 分离之后,Python 代码中的异常将无法正确显示。 重新附加 IDE 或重新启动 ArcGIS Pro 可解决该问题。

注:

Microsoft Visual Studio 2017 可用于调试 ArcGIS Pro 2.1 及更高版本。 两个应用程序中的较早版本将不会起作用。

PyCharm 专业版

以下 ArcGIS Pro 组件可在 PyCharm 专业版中调试:

  • 脚本工具执行
  • 脚本工具验证

pdb 模块

pdb 模块是 Python 标准库的一部分。 该模块并非完全开发的 IDE,但可用于交互式源代码调试。 pdb 模块不能用于在 ArcGIS Pro 内进行调试,但是可以用于调试独立脚本,包括脚本工具的执行代码。

使用 pdb 模块可用于调试正在独立 Python 脚本中运行的脚本工具执行代码。 向脚本工具代码中添加断点(使用 import pdb;pdb.set_trace()),然后运行调用该脚本工具的 Python 脚本。 在遇到断点时,Python 会进入交互模式。 请记住在调试工作完成时移除断点代码。

调试脚本工具验证代码

IDE 只能调试 Python 文件 (.py)。 对于脚本工具验证中的 Python 代码(嵌入到工具箱中),将代码复制到外部 Python 文件,并将 Python 工具箱中的代码替换为以下示例。 然后可以打开 IDE 中的 Python 文件并设置断点,将 IDE 附加到 ArcGIS Pro,之后运行脚本工具。 完成代码修改后,将 Python 文件内容复制回工具验证。

在以下示例中,val.py 包含 ToolValidator 类,并以工具箱形式保存到相同的目录中。


import sys
import val

# the following code will reload the val.py module if it's modified
if 'val' in sys.modules:
    import importlib
    importlib.reload(val)

# ToolValidator should exist at the global scope
ToolValidator = val.ToolValidator

当用户与工具进行交互时,会反复执行脚本工具验证中的验证代码。

调试 Python 工具箱

IDE 只能调试 Python 文件 (.py)。 请按照以下步骤调试 Python 工具箱。

  1. Python 工具箱一样在同一目录中创建外部 Python 文件。
  2. Python 工具箱的 execute 函数内复制粘贴,将其粘贴到新 Python 文件中的 func() 函数。 复制任何其他必要的函数。
  3. Python 工具箱 execute 函数中的代码替换为以下内容:
  4. import execute_code
    execute_code.func(parameters)
  5. Visual Studio 中打开 Python 文件,按照上述步骤设置断点,调试 Python 工具箱。

下面的代码是 Python 工具箱中的 execute 函数和正在调用的单独 Python 文件的示例。

在以下示例中,runCode.py 以 .pyt 文件形式保存到相同的目录中。

import arcpy

def func(parameters):
    arcpy.AddMessage("This is where your code execution goes.")
    return

下面的代码是 Python 工具箱中修改的 execute 函数示例。

def execute(self, parameters, messages):
    """The source code of the tool."""
    import runCode

    runCode.func(parameters)
    return

完成代码修改后,将 Python 文件内容复制回工具的 execute 函数。