【问题标题】:Why wont my python while loop stop?为什么我的 python while 循环不会停止?
【发布时间】:2016-01-19 03:35:00
【问题描述】:

我有一个循环应该选择特征并继续循环,直到它不再选择新特征

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:

但这给了我同样的结果

【问题讨论】:

  • 我对 Gis 一无所知,所以我想问的是真的selectcount 类型为int 吗?如果没有,当您使用 repr 而不是 str 时会打印什么?
  • “它是否忽略了休息” - 显然不是。 “是 if 条件没有得到满足” - 嗯,必须是这样。检查这些变量的类型。
  • 这里,看那个:gis.stackexchange.com/questions/55246/…。您的问题是 selectcount 总是收到一个新的 different 对象,即使基础数字是相同的。因此,他们永远不会平等。

标签: python loops while-loop arcgis break


【解决方案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))

避免重复自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2015-12-30
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2016-08-22
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多