Hello, I am just wondering if anyone tells me the way to get a count zero to exit from the while loop that uses arcpy.GetCount_management.
I set up for loop to go through a selection of intersection between polygon (ssLyr) layer and point geometry (cenPnt). Then, while the selected polygon count is greater than zero, a second for loop is carried out. But I would like to exit the while loop in case a specific value (neigbID == 9999) is returned during the second loop.
I tried a couple of ways; arcpy.management.SelectLayerByAttribute(ssLyr, "CLEAR_SELECTION"), del cursor1, arcpy.Delete_management(ssLyr) to get zero count from int(arcpy.GetCount_management(ssLyr).getOutput(0)) but none of them worked. Thank you in advance for any python coding help!
My code is here
for row in cursor:
cenPnt = row[1]
arcpy.management.SelectLayerByLocation(ssLyr, 'INTERSECT', cenPnt)
while int(arcpy.GetCount_management(ssLyr).getOutput(0)) > 0:
with arcpy.da.SearchCursor(ssLyr, fieldName2) as cursor1:
for row1 in cursor1:
biorID = row1[2]
neigbID = row1[3]
if neigbID == 9999:
print("\nError - Exit loop")
#Would like to get count zero here
#arcpy.management.SelectLayerByAttribute(ssLyr, "CLEAR_SELECTION")
#del cursor1
#arcpy.Delete_management(ssLyr)
print("Check count: ", int(arcpy.GetCount_management(ssLyr).getOutput(0)))
Solved! Go to Solution.
Store the count in a variable. If you encounter your break condition, change that variable to 0 before breaking out of the for loop.
for row in cursor:
cenPnt = row[1]
arcpy.management.SelectLayerByLocation(ssLyr, 'INTERSECT', cenPnt)
ssLyrCount = int(arcpy.GetCount_management(ssLyr).getOutput(0))
while ssLyrCount > 0:
with arcpy.da.SearchCursor(ssLyr, fieldName2) as cursor1:
for row1 in cursor1:
biorID = row1[2]
neigbID = row1[3]
if neigbID == 9999:
print("\nError - Exit loop")
ssLyrCount = 0
break
I don't know the rest of your script, but the snippet you posted will result in an infinite while loop if you select at least 1 feature and have no features with neigbID=9999 in the selection. Any reason to use while over if?
The first getcount_management needs to return a value needs to return a value when the script ends.
Hi Dan, thanks for your reply!
What I wanted is actually just keep the while loop continues in the special case.
Store the count in a variable. If you encounter your break condition, change that variable to 0 before breaking out of the for loop.
for row in cursor:
cenPnt = row[1]
arcpy.management.SelectLayerByLocation(ssLyr, 'INTERSECT', cenPnt)
ssLyrCount = int(arcpy.GetCount_management(ssLyr).getOutput(0))
while ssLyrCount > 0:
with arcpy.da.SearchCursor(ssLyr, fieldName2) as cursor1:
for row1 in cursor1:
biorID = row1[2]
neigbID = row1[3]
if neigbID == 9999:
print("\nError - Exit loop")
ssLyrCount = 0
break
I don't know the rest of your script, but the snippet you posted will result in an infinite while loop if you select at least 1 feature and have no features with neigbID=9999 in the selection. Any reason to use while over if?
Hi Johannes, thanks a lot for your follow up and inquiry!
The rest of scripts continues with elif to deal with a case that biorID is not equal to neighbID. This continues while the output count is one but once it gets zero, then other functions are to be triggered. I don't know if this is the best way but I wrote a code like below.
elif biorID != neighbID:
Expression2 = "BID = {0}".format(neighbID)
arcpy.management.SelectLayerByAttribute(ssLyr, 'NEW_SELECTION', Expression2)
print('Expression2 is: ', Expression2)
if ssLyrCount == 0:
##Other functions##
else:
pass