Отладка инструментов-скриптов

Ошибки кодирования неизбежны, и существует два главных способа как установить, где произошла ошибка:

Использование выражений печати

Использование выражений печати для обнаружения ошибок является очевидным и наиболее распространенным способом. Поскольку инструменты-скрипты имеют доступ к диалоговому окну инструмента, отображающему ход выполнения процесса, вы можете отредактировать ваш скрипт таким образом, чтобы он содержал вызовы в адрес AddMessage(), AddWarning() или AddError() для отображения в этом диалоговом окне значений и информации о контрольных точках процесса. Другой вариацией может быть использование независимого метода обратных сообщений (returning messages), таких как метод MessageBox модуля win32ui. В этом методе отображается всплывающее диалоговое окно. Поскольку для продолжения выполнения вам нужно нажать OK в диалоговом окне, данный метод позволяет вам ускорить выполнение скрипта. Приведем пример использования обоих методов.

import arcpy
import win32ui
import win32con

n = 5

# Print message to progress dialog
#
arcpy.AddMessage("Value of n = " + str(n))

# Issue a popup dialog with OK and Cancel button
#
val = win32ui.MessageBox("Value of n = " + str(n), "title",
                         win32con.MB_OKCANCEL)

# Based on the button clicked, you can branch execution
#
if val == 1:
    arcpy.AddMessage("You clicked OK")
else:
    arcpy.AddError("You clicked Cancel")
    raise arcpy.ExecuteError, "Execution stops due to Cancel button click"

arcpy.AddMessage("This statement reached")

Использование отладчиков

Другой метод заключается в применении интерактивной среды разработки (IDE) Python, поддерживающей отладку. Отладчики позволяют устанавливать точки разрыва, шагать в, из или перешагивать через отдельные строки кода; а также просматривать содержимое переменных, без изменения вашего кода. По сравнению с выражениями печати, отладчики намного эффективней и обычно позволяют быстро обнаружить ошибку.

Обычные IDEs включают следующее:

ПримечаниеПримечание:

PythonWin включен в установочный пакет, но не устанавливается по умолчанию. Если у вас нет установочного диска, пакет установки PythonWin доступен на странице Python для расширений Windows.

Одним из способов использования отладчика заключается в открытии скрипта непосредственно в IDE, изменении его таким образом, чтобы все параметры имели значение, и последующей отладки. Этот способ хорошо работает в простых случаях. Однако, если ваш скрипт использует параметры представления слоя или таблицы, то эти переменные должны создаваться на лету. Комплексные параметры, такие как полевая карта или пространственная привязка, очень трудно создать как переменные.

В идеале для отладки IDE вам надо открыть диалоговое окно скрипта, ввести параметры и запустить IDE со своим кодом. Это можно сделать, внеся несколько простых изменений, описанных ниже.

Используйте GetParameterAsText(0)

Шаг первый – это изменение вашего скрипта таким образом, чтобы он использовал GetParameterAsText() вместо sys.argv[], как было показано в Параметры инструмента-скрипта. Это изменение вы можете сохранить—нет необходимости изменять код обратно на sys.argv[].

Запустите инструмент и отладку.

  1. Установите Отладчик (как PythonWin), нажав Геообработка (Geoprocessing) > Опции геообработки (Geoprocessing Options).
    ПодсказкаПодсказка:

    Если у вас установлен PythonWin и вы хотите использовать его как свой отладчик, то соответствующий путь к настройкам Отладчика (Debugger) будет зависеть от вашей установки, но вероятнее всего это будет C:\Python27\ArcGIS10.1\Lib\site-packages\pythonwin\Pythonwin.exe.

  2. В окне Каталога щелкните правой кнопкой инструмент и нажмите Отладить (Debug)
  3. Откройте инструмент-скрипт из набора инструментов, введите любые параметры, которые вы хотите установить, затем нажмите ОК. Открытие IDE может занять несколько секунд. Отобразится код скрипта, и вы можете работать с приложением по отладке в обычном порядке.
    ПримечаниеПримечание:

    Параметр Отладчик (Debugger) всегда запускает скрипт в приоритетном режиме.

Вы можете задать точку разрыва, чтобы сценарий выполнялся до точки разрыва, а также использовать любые другие опции отладчика. Установленные вами в диалоговом окне значения параметров будут отражены в GetParameterAsText().

При запуске сценария скрипт и приложение будут продолжать взаимодействовать, как обычно. Так что, если вы используете такие функции, как AddMessage(), AddWarning() или AddError(), то в приложении появятся соответствующие уведомления. Если вы используете функции прогрессора, то индикатор выполнения процесса будет обновляться по мере выполнения вашего сценария. Когда сценарий будет завершен, вы можете вернуться назад к приложению, закрыв отладчик. Либо, если вы планируете повторную отладку вашего инструмента-скрипта, вы можете оставить отладчик открытым и нажать Отменить (Cancel) в диалоговом окне инструмента, отображающем ход процесса.

Связанные темы

9/10/2013