Почему мой питон не останавливается во время цикла?

У меня есть цикл, который должен выбирать функции и продолжать цикл до тех пор, пока он не перестанет выбирать новые функции.

arcpy.SelectLayerByLocation_management("antiRivStart","INTERSECT","polygon")

previousselectcount = -1
selectcount = arcpy.GetCount_management("StreamT_StreamO1")
while True:
#selectCount = arcpy.GetCount_management("StreamT_StreamO1")
    mylist = []
    with arcpy.da.SearchCursor("antiRivStart","ORIG_FID") as mycursor:
        for feat in mycursor:
            mylist.append(feat[0])
            liststring = str(mylist)
            queryIn1 = liststring.replace('[','(')
            queryIn2 = queryIn1.replace(']',')')
    arcpy.SelectLayerByAttribute_management('StreamT_StreamO1',"ADD_TO_SELECTION",'OBJECTID IN '+ queryIn2 )
    arcpy.SelectLayerByLocation_management("antiRivStart","INTERSECT","StreamT_StreamO1","","ADD_TO_SELECTION")
    previousselectcount = selectcount
    selectcount = arcpy.GetCount_management("StreamT_StreamO1")
    print str(selectcount), str(previousselectcount)
    if selectcount == previousselectcount:
        break

По моим подсчетам, как только он начнет печатать номер имени дважды, он должен остановиться, но этого не происходит, он продолжает печатать «15548 15548» снова и снова. Игнорирует ли он разрыв или условие if не выполняется?

Я также пробовал с

while selectcount != previousselectcount:

но это дало мне тот же результат


person whatahitson    schedule 20.10.2015    source источник
comment
Я ничего не знаю о Гисе, поэтому спрашиваю, действительно ли selectcount относятся к типу int? А если нет, то что он печатает, когда вы используете repr вместо str?   -  person Lærne    schedule 20.10.2015
comment
Игнорирование перерыва - явно нет. если условие не выполняется - ну, это должно быть так. Проверьте тип этих переменных.   -  person Karoly Horvath    schedule 20.10.2015
comment
Вот, посмотрите на это: gis.stackexchange.com/questions/55246/ . Ваша проблема в том, что selectcount всегда получает новый другой объект, даже если базовый номер один и тот же. Таким образом, они никогда не равны.   -  person Lærne    schedule 20.10.2015


Ответы (1)


Переменные в Python являются динамическими. Тот факт, что вы инициализируете previousselectcount целым числом, не означает, что оно будет единицей при вызове previousselectcount = selectcount. Вы можете свободно избавиться от этой линии.

Если заменить:

selectcount = arcpy.GetCount_management("StreamT_StreamO1")

С:

selectcount = int(arcpy.GetCount_management("StreamT_StreamO1").getOutput(0))

Для обеих строк вы будете сравнивать целочисленные значения вместо того, что сравнивает оператор равенства для объекта.

Еще лучше, почему бы не написать функцию, которая сделает это за вас:

def GetCount():
    return int(arcpy.GetCount_management("StreamT_StreamO1").getOutput(0))

Спасите себя от повторения.

person James Jenkinson    schedule 20.10.2015