Более

Отладка CalculateField_management ОШИБКА 000623: недопустимый тип значения для поля параметра?


Я пытаюсь выбрать записи в своей таблице, в которых есть определенные слова в поле «Имя», а затем закодировать их как 0 (не аптека) или 1 (аптека). Это всего лишь тест с поиском двух слов для выбора не аптек.

Я получаю:

ExecuteError: ОШИБКА 000622: не удалось выполнить (вычислить поле). Параметры не действительны. ОШИБКА 000623: недопустимый тип значения для поля параметра.

Я не знаю, какая переменная недействительна. Какие-нибудь мысли? Я также не знаю, будет ли Поле вычисления работать только с выбранными записями. Я не могу уйти достаточно далеко, чтобы это проверить.

# импортировать системные модули import arcpy import random # установить среду рабочей области myWorkspace = arcpy.env.workspace = "C: / PharmacyProtocol / tables" arcpy.env.overwriteOutput = True # установить переменные out_table = "VT_TRL_DLC.dbf" # установить переменные поля fieldList = arcpy.ListFields (out_table) для поля в fieldList: if field.name == "Name": nameF = field elif field.name == "Pharmacy": pharmF = field # создать список слов, которые НЕ являются аптеками noPharmWords = [ 'AMERICAN LEGION', 'BAR'] expression = 0 # найти слова в поле Name, закодировать Pharmacy как "0", если еще не закодировано для codeWord в noPharmWords: #create SQL text clause fldName = '"Name"' endClause = "% '"SQLstr = fldName +" LIKE'% "+ codeWord + endClause # выбрать записи из таблицы с codeWord cursor = arcpy.da.SearchCursor (out_table, [" Name "], SQLstr) arcpy.CalculateField_management (out_table, pharmF, expression) дель курсор

Похоже, вы неправильно используете курсор.arcpy.CalculateField_management ()будет работать со всей таблицей или табличным представлением, которое ему дано, независимо от существования любого объекта курсора. Вероятно, это не удается, потому что вы проезжаете поле объект а не поле название к нему.

Попробуйте вместо этого использовать курсор обновления, заменив это:

# выбрать записи из таблицы с помощью codeWord cursor = arcpy.da.SearchCursor (out_table, ["Name"], SQLstr) arcpy.CalculateField_management (out_table, pharmF, expression) del cursor

с этим:

# выбрать записи из таблицы с codeWord с arcpy.da.UpdateCursor (out_table, ["Name", "Pharmacy"], SQLstr) в качестве курсора: для строки в курсоре: row [1] = выражение cursor.updateRow (row)

Является ли поле целочисленным типом, вы можете попробовать выражение = int (0). Поле «Вычислить» будет работать только с выбранными записями или со всеми записями, если ни одна из них не выбрана. Будет ли вычисляться поле 0 из таблицы атрибутов для этого поля?

Единственный другой вариант, который я могу предложить, - это закомментировать функцию CalcField и, возможно, сделать что-то еще, подтверждающее, что курсор работает так, как задумано.


Чтобы определить, почему вы получаете эту ошибку, я бы рекомендовал заменить:

arcpy.CalculateField_management (out_table, pharmF, выражение)

с:

print out_table print PharmF print expression arcpy.CalculateField_management (out_table, pharmF, expression)

Я подозреваю, что вы не предоставляете CalculateField_management значения параметров, которые, по вашему мнению, являются.


Смотреть видео: ArcGIS - Field Calculator - Replace string in a column (October 2021).