Python跳过我的for循环

2 投票
1 回答
2687 浏览
提问于 2025-04-17 16:08

首先,我想说明我在Python方面还是个新手。目前正在上一个关于在ArcGIS环境中使用Python的课程。我的项目是写一个简单的程序,用来创建文件并将其他文件复制到这些文件里。不过,作业的一部分要求在程序运行时打印出一些信息,比如最后的打印语句应该是这样的:

正在处理多边形要素类....

正在处理要素类 >> 建筑

字段信息:

 etc.

这是我代码中应该实现这个功能的小部分:

pointlist = arcpy.ListFeatureClasses("*", "Point")
print "Processing Point FeatureClasses..."
for pl in pointlist:
    arcpy.MakeFeatureLayer_management(pl, "Point" + 1)
    pointlayer = arcpy.SelectLayerByLocation_management(pl, "intersect", MapGridID)
    pointcount = int(arcpy.GetCount_management(pointlayer).getOutput(0))
    if pointcount >= 1:
        arcpy.CopyFeatures_management(pointlayer, OutputGDB)
    for pl in pointlist:
        print "Processing FeatureClass:" + pl
        pointfield = arcpy.ListFields()
        for pf in pointfield:
            print "Field Name:" + pf

问题是,它打印出了第一个语句“正在处理点要素类”,但后面的内容却没有打印出来,然后直接跳到我代码的下一部分去执行了。你知道这是为什么吗?抱歉如果我的格式或措辞有点不对/听起来奇怪。谢谢。

编辑

我也给我的教授发了邮件,请求一些指导,他回复了我一个稍微修改过的代码版本。现在我可以打印出所有内容,除了点字段的打印语句,这些现在被跳过了。以下是代码:

pointlist = arcpy.ListFeatureClasses("*", "Point")
print "Processing Point FeatureClasses...\n"
i = 1
for pl in pointlist:
    print "Processing FeatureClass: " + pl
    featlayernamepoint = "Point" + str(i)
    arcpy.MakeFeatureLayer_management(pl, featlayernamepoint)
    arcpy.SelectLayerByLocation_management(featlayernamepoint, "intersect",   featurelayerMG2)
    pointcount = int(arcpy.GetCount_management(featlayernamepoint).getOutput(0))
    if pointcount >= 1:
        arcpy.CopyFeatures_management(featlayernamepoint, OutputGDB)
        pointfield = arcpy.ListFields(featlayernamepoint)
        for pf in pointfield:
            print "Field Name: " + pf.name
    i += 1

1 个回答

0

你忘了把点传给 ListFields() 这个函数了。

pointfield = arcpy.ListFields(pl)
for pf in pointfield:
      print "Field Name:" + pf.name

撰写回答