2015-10-20 111 views
2

我有一個應該選擇功能,並不斷循環,直到它不再選擇新的功能爲什麼不讓我的python while循環停止?

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」。它是否在中斷或者是否符合條件?

我也試圖與

while selectcount != previousselectcount: 

但是這給了我同樣的結果

+4

我對Gis一無所知,所以我要求的確是'int'類型的'selectcount'?如果不是,當你使用'repr'而不是'str'時它會打印什麼? –

+0

「它是否打破了休息」 - 顯然不是。 「如果條件沒有得到滿足」 - 好吧,情況就是如此。檢查這些變量的類型。 –

+2

在這裏,看看:http://gis.stackexchange.com/questions/55246/cast-arcpy-result-as-an-integer-instead-arcpy-getcount-management。你的問題是,selectcount總是收到一個新的**不同的**對象,即使底層數字是相同的。因此他們永遠不會平等。 –

回答

1

變量在Python是動態的。僅僅因爲您將previousselectcount初始化爲整數並不意味着當您撥打previousselectcount = selectcount時它將爲1。你可以隨意擺脫那條線。

如果更換:

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)) 

更妙的是,爲什麼不寫一個函數來爲你做它。