Ошибки кодирования неизбежны, и существует два главных способа как установить, где произошла ошибка:
- Добавьте в ваш код какое-нибудь выражение печати, что поможет выделить проблему.
- Используйте интерактивный отладчик.
Использование выражений печати
Использование команды print для обнаружения ошибок является очевидным и наиболее распространенным способом. Поскольку инструменты-скрипты имеют доступ к диалоговому окну инструмента, отображающему ход выполнения процесса, вы можете отредактировать ваш скрипт таким образом, чтобы он содержал вызовы в адрес AddMessage(), AddWarning() или AddError() для отображения в этом диалоговом окне значений и информации о контрольных точках процесса. Другой вариацией может быть использование независимого метода возвращаемых сообщений, например, метода win32ui модуля MessageBox. В этом методе отображается всплывающее диалоговое окно. Поскольку для того, чтобы продолжить выполнение, вам нужно нажать OK в диалоговом окне, данный метод позволяет вам контролировать процесс выполнения скрипта. Приведем пример использования обоих методов.
import arcpy
import win32ui
import win32con
n = 5
# Print message to progress dialog
#
arcpy.AddMessage("Value of n = {}".format(n))
# Issue a popup dialog with OK and Cancel button
#
val = win32ui.MessageBox("Value of n = {}".format(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, поддерживающей отладку. Отладчики позволяют вам устанавливать точки разрыва, шагать в, из или перешагивать через отдельные строки кода; а также просматривать содержимое переменных, без изменения вашего кода. По сравнению с выражениями вставки printотладчики намного эффективней и обычно позволяют быстро обнаружить ошибку.
Стандартные среды разработки (IDE):
- Среда разработки (IDE) Python, поставляемая вместе с Python
- PythonWin
- PyScripter
- Коммерческие системы, такие как Wing IDE и PyCharm
Одним из способов использования отладчика заключается в открытии скрипта непосредственно в IDE, изменении его таким образом, чтобы все параметры имели значение, и последующей отладки. Этот способ достаточно хорошо работает в простых случаях. Однако, если ваш скрипт использует параметры представления слоя или таблицы, то эти переменные должны создаваться на лету. Комплексные параметры, такие как матрица соответствия полей или пространственная привязка, очень трудно создать как переменные.
В идеале для отладки IDE вам надо открыть диалоговое окно скрипта, ввести параметры и запустить IDE со своим кодом. Это можно сделать, внеся несколько простых изменений, описанных ниже.
Использование GetParameterAsText
Шаг первый – это изменение вашего скрипта таким образом, чтобы он использовал GetParameterAsText вместо sys.argv, как было показано в разделе Параметры инструмента-скрипта. Это изменение вы можете сохранить – нет необходимости изменять код обратно на sys.argv.
Запустите инструмент и отладку.
- Установите Отладчик (как PythonWin), нажав Геообработка (Geoprocessing) > Опции геообработки (Geoprocessing Options).
- В окне Каталога щелкните правой кнопкой инструмент и нажмите Отладить
- Откройте инструмент-скрипт из набора инструментов, введите любые параметры, которые вы хотите установить, затем нажмите ОК. Открытие IDE может занять несколько секунд. Отобразится код скрипта, и вы можете работать с приложением по отладке в обычном порядке.
Вы можете задать точку разрыва, чтобы скрипт выполнялся до точки разрыва, а также использовать любые другие опции отладчика. Установленные вами в диалоговом окне значения параметров будут отражены в GetParameterAsText.
При запуске скрипт и приложение будут продолжать взаимодействовать, как обычно. Так что, если вы используете такие функции, как AddMessage, AddWarning или AddError, то в приложении появятся соответствующие уведомления. Если вы используете функции прогрессора, то индикатор выполнения процесса будет обновляться по мере выполнения вашего сценария. Когда скрипт будет завершен, вы можете вернуться к приложению, закрыв отладчик. Либо, если вы планируете повторную отладку вашего инструмента-скрипта, вы можете оставить отладчик открытым и нажать Отменить в диалоговом окне инструмента, отображающем ход процесса.