Ошибки кодирования неизбежны, и существует два главных способа как установить, где произошла ошибка:
- Добавьте в ваш код какое-нибудь выражение печати, что поможет выделить проблему.
- Используйте интерактивный отладчик.
Использование выражений печати
Использование команды print для обнаружения ошибок является очевидным и наиболее распространенным способом. Поскольку инструменты-скрипты имеют доступ к диалоговому окну инструмента, отображающему ход выполнения процесса, вы можете отредактировать ваш скрипт таким образом, чтобы он содержал вызовы в адрес 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 = {}".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, доступный в интернете по адресу https://sourceforge.net/projects/pywin32
- PyScripter, доступ к которому имеется по адресу http://code.google.com/p/pyscripter
- Коммерческие системы, такие ка Wing IDE (http://wingware.com)
Одним из способов использования отладчика заключается в открытии скрипта непосредственно в IDE, изменении его таким образом, чтобы все параметры имели значение, и последующей отладки. Этот способ достаточно хорошо работает в простых случаях. Однако, если ваш скрипт использует параметры представления слоя или таблицы, то эти переменные должны создаваться на лету. Комплексные параметры, такие как матрица соответствия полей или пространственная привязка, очень трудно создать как переменные.
В идеале для отладки IDE вам надо открыть диалоговое окно скрипта, ввести параметры и запустить IDE со своим кодом. Это можно сделать, внеся несколько простых изменений, описанных ниже.
Используйте GetParameterAsText()
Шаг первый – это изменение вашего скрипта таким образом, чтобы он использовал GetParameterAsText() вместо sys.argv[], как было показано в Параметры инструмента-скрипта. Это изменение вы можете сохранить – нет необходимости изменять код обратно на sys.argv[].
Запустите инструмент и отладку.
- Выберите Отладчик (например, PythonWin), нажав Геообработка (Geoprocessing) > Опции геообработки (Geoprocessing Options).
- В окне Каталога щелкните правой кнопкой инструмент и нажмите Отладить (Debug)
- Откройте инструмент-скрипт из набора инструментов, введите любые параметры, которые вы хотите установить, затем нажмите ОК. Открытие IDE может занять несколько секунд. Отобразится код скрипта, и вы можете работать с приложением по отладке в обычном порядке.
Вы можете задать точку разрыва, чтобы скрипт выполнялся до точки разрыва, а также использовать любые другие опции отладчика. Установленные вами в диалоговом окне значения параметров будут отражены в GetParameterAsText().
При запуске скрипт и приложение будут продолжать взаимодействовать, как обычно. Так что, если вы используете такие функции, как AddMessage(), AddWarning() или AddError(), то в приложении появятся соответствующие уведомления. Если вы используете функции progressor, то индикатор выполнения процесса будет обновляться по мере выполнения вашего скрипта. Когда скрипт будет завершен, вы можете вернуться к приложению, закрыв отладчик. Либо, если вы планируете повторную отладку вашего инструмента-скрипта, вы можете оставить отладчик открытым и нажать Отменить (Cancel) в диалоговом окне инструмента, отображающем ход процесса.