首页 > 解决方案 > 在尝试除外期间未附加列表

问题描述

这只是我所拥有的一小部分。最终,我正在为 2 种类型的 RBJ 表检查 Esri 地理数据库。如果表不存在,我想将地理数据库的名称附加到新列表中。

我创建了一个名为missing_rbj 的新空列表。我需要代码来检查是否有 RBJ 表,执行所需的附加到 CSV,如果出现错误(因为没有 RBJ 表),然后将 aoi_name 附加到列表中。当我在最后打印列表时,即使多个项目被标记为不存在 RBJ,它也会返回空。对于更多背景知识,此尝试除外是在 for 循环中,其中 x 是地理数据库的路径。我将 aoi_name 定义为从原始路径拆分的 gdb 名称。

    missing_rbj = []
    aoi_name = x.split("\\")[-1]
    aoi_name = aoi_name.replace(".gdb", "")

    try:
        ses_table = r'{0}\GDB_REVSESSIONTABLE'.format(x)

        ses_ids = {}
        with arcpy.da.SearchCursor(ses_table, ['SESSIONID', 'USERNAME']) as ses_cursor:
            for row in ses_cursor:
                ses_ids[row[0]] = row[1]

        # REVCHECKRUNTABLE
        rev_table = os.path.join(x, "REVCHECKRUNTABLE")

        if arcpy.Exists(rev_table):
            rev_data = []
            rev_table_headers = ['SESSIONID', 'RECORDID', 'BATCHJOBDATETIME', 'BATCHJOBGROUPNAME', 'CHECKNAME',
                                 'CHECKTITLE', 'CHECKRUNCONTEXT', 'RESOURCENAME', 'TOTALVALIDATED', 'TOTALRESULTS']

            with arcpy.da.SearchCursor(rev_table, rev_table_headers) as rev_cursor:
                for row in rev_cursor:
                    csv_write = []
                    analyst = ses_ids[row[0]]
                    for x in row:
                        csv_write.append(x)
                    csv_write.append(aoi_name)
                    csv_write.append(analyst[:2].upper())
                    csv_write.append(datetime.datetime.now())
                    rev_data.append(csv_write)

            with open(rbj_revcheck_csv, 'ab') as f:
                wr = csv.writer(f)
                for h in rev_data:
                    wr.writerow(h)

        # REVTABLEMAIN
        rev_main = r'{0}\REVTABLEMAIN'.format(x)

        if arcpy.Exists(rev_main):
            flds = [t.name for t in arcpy.ListFields(rev_main)]
            rev_data = []
            with arcpy.da.SearchCursor(rev_main, flds) as main_cursor:
                for row in main_cursor:
                    csv_write = []
                    for i in row:
                        csv_write.append(i)
                    csv_write.append(aoi_name)
                    csv_write.append(analyst[:2].upper())
                    csv_write.append(datetime.datetime.now())
                    rev_data.append(csv_write)

            with open(rbj_revmain_csv, 'ab') as f:
                wr = csv.writer(f)
                for h in rev_data:
                    wr.writerow(h)
        print "RBJ Good!\n"

    except:
        missing_rbj.append(aoi_name)
        print "No RBJ Exists in GDB.\n"

任何帮助将不胜感激!我有一种感觉,这是我多次忽略的事情。这是一个相当长的项目!

标签: python-2.7arcmap

解决方案


就像我说的那样,这绝对是我忽略的东西。我忘记了,因为空列表在 for 循环中,在 for 循环完成后它将不再存在。我将missing_rbj移到循环之外,它起作用了!


推荐阅读