2013-08-13 4 views
1

Я работаю над ArcMap и у меня есть этот питон код:UnboundLocalError с Python на ArcGis

import arcpy, sys 

feature = arcpy.GetParameterAsText(0) 


def nearRoutine(): 
    #calculate the distances using the current dataset 
    arcpy.Near_analysis(feature, feature) 

    #iterate through any features which are within the distance 
    cur = arcpy.UpdateCursor(feature, '"NEAR_DIST" < 500') 
    row1 = cur.next() 
    while row1: 

     #this point is within the distance of its neighbor, so delete it 
     cur.deleteRow(row1) 

     #now re-run this routine on the new dataset 
     del row1, cur 
     nearRoutine 

#call the recursive routine. It will get progressively faster to run as it will loop through fewer points each time 
nearRoutine() 

Мое сообщение об ошибке: UnboundLocalError: локальная переменная 'Row1', на который ссылается перед тем назначением

Я не понять, потому что моя переменная четко определена ...

У кого-то есть проблема?

+0

Добро пожаловать в переполнение стека! Спасибо, что предоставили образец кода вместе с вашим вопросом. Мне любопытно, что вы надеялись бы в этом коде: 'while row1: ...; del row1 ... '. –

+0

Убедитесь, что мои переменные стираются до перезапуска моего порядка возле Routine – user19717

+0

Я вижу. Вызов 'nearRoutine' рекурсивно не так много * перезапустите * эту функцию, как создать новый экземпляр. Локальные переменные уникальны для каждого экземпляра функции; «row1» во внутреннем функциональном кадре полностью не связан с «row1» во внешнем фрейме функции, поэтому 'del' не требуется. И, как вы обнаружили, плохо по другим причинам. –

ответ

1

Вы удаляете row1, а затем продолжаете выполнять итерацию, требуя (проверяя) его!

Я не уверен, что вам действительно нужно использовать del по вашей переменной row1 или cur, где у вас есть. Вы удаляете эти переменные, а не их содержимое в своей структуре данных.

+0

Я переопределил две переменные, которые я удаляю (row1 и cur), и это работает Спасибо – user19717

+0

Рад, что я смог помочь. Не забудьте «принять» этот ответ, нажав галочку рядом со своим счетом. – BlackVegetable

Смежные вопросы