(я предполагаю, что вы исходя из кода this ArcPy Café recipe.)
Когда вы вызываете cursor.updateRow
, вам необходимо передать ему параметр: список значений такой же длины, как и список row
, с которым он будет работать. Так, к примеру ...
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
print row # prints a list of 3 values -- ['a', 'b', 'c']
row[0] = 'd' # changes element 0 of list
print row # ['d', 'b', 'c']
cursor.updateRow(row) # passes ['d', 'b', 'c']
Я только изменил значение из FIELD
, но и должны были отправить обратно значения FOO
и BAR
. Я мог бы также сократить его:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d', 'b', 'c']) # will work
Но проходя меньше значения в списке не будет работать:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d']) # will fail
(Это будет так же сломается, если я прохожу слишком много значения - число элементов в списке должно совпадать с количеством полей, называемых по UpdateCursor
.)
Так что для вашей конкретной ситуации, вам необходимо передать обратно значения п или [email protected]
, XShift
и YShift
. Прямо сейчас, это только получение [email protected]
(в котором работает весь оригинальный рецепт фрагмента).
Try:
with arcpy.da.UpdateCursor(in_features, ['[email protected]']) as cursor:
for row in cursor:
cursor.updateRow([[row[0][0] + (row[1] or 0),
row[0][1] + (row[2] or 0)]], row[1], row[2])
Вы упускаете апостроф вокруг 'YShift' – pbreach
@pbreach Я добавил апостроф, но теперь я получаю следующее сообщение об ошибке. 'Ошибка выполнения Traceback (самый последний вызов последнего): Файл "", строка 1, в Файл "", строка 6, в shift_features TypeError: размер последовательности должен соответствовать размеру row' –