python - 将 .dbf 连接到 .shp - 然后计算字段脚本 - 错误处理,脚本在没有连接时退出

标签 python join error-handling arcgis

我创建了一个简单的脚本来将 .dbf 连接到 .shp,然后计算一些字段。该脚本运行良好,但如果由于某种原因没有连接,我会收到以下错误,该错误会在尝试将其余的 .dbf 连接到我的工作目录中的 .shp 之前关闭脚本。我如何告诉脚本忽略未加入的 .shps,并继续处理目录中的其余 .shps?

第 20 行,在 gp.CalculateField_management("parcs", "APN2", "[TAX.PARCEL_ID]") ExecuteError:错误 999999:执行函数时出错。使用了无效的 SQL 语句。 使用了无效的 SQL 语句。

这是脚本:

# Create the geoprocessor object
gp = arcgisscripting.create(9.3)
gp.OverWriteOutput = True

# Set the workspace. List all of the folders within
gp.Workspace = "C:\JoinCalculateBatch"
fcs = gp.ListWorkspaces("*","Folder")

for fc in fcs:
    print fc
    gp.MakeFeatureLayer(fc + "\\Parcels.shp", "parcs")  
    joinTable = (fc + "\\TAX.dbf")
    gp.AddJoin_management("parcs", "APN", joinTable, "PARCEL_NUM")  
    gp.CalculateField_management("parcs", "APN2", "[TAX.PARCEL_ID]")  
    gp.CalculateField_management("parcs", "SIT_FULL_S", "[TAX.SITADDRESS]") 

最佳答案

您可以尝试下面的代码,它会简单地忽略 Join 或 Calculating the Field 函数期间的任何错误,并继续循环的下一次迭代。如果您正在编写“一次性”脚本,您可能会逃脱这一点,但是如果您打算在将来使用该脚本或打算与其他人共享它,您应该弄清楚为什么 [TAX.PARCEL_ID] 参数抛出 SQL 错误并修复它。

话虽如此,如果没有看到您的表格和形状文件,就很难确定到底是什么导致了您的错误。将 Parcels.shp 和 Tax.dbf 拉入 ArcMap 并加入它们,然后尝试使用计算字段工具查看参数是否正确可能会对您有所帮助。

for fc in fcs:
    print fc
    gp.MakeFeatureLayer(fc + "\\Parcels.shp", "parcs")  
    joinTable = (fc + "\\TAX.dbf")

    try:
        gp.AddJoin_management("parcs", "APN", joinTable, "PARCEL_NUM")  
        gp.CalculateField_management("parcs", "APN2", "[TAX.PARCEL_ID]")  
        gp.CalculateField_management("parcs", "SIT_FULL_S", "[TAX.SITADDRESS]")
    except:
        print 'Join or Calculate Field did not work for %s.' % (fc)

您可能想尝试下面的语法,它直接来自 docs .

gp.CalculateField_management("parcs", "APN2", "!TAX.PARCEL_ID!", "PYTHON")

关于python - 将 .dbf 连接到 .shp - 然后计算字段脚本 - 错误处理,脚本在没有连接时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729148/

相关文章:

python - Pandas Groupby 有坏行

python - 列操作 R

php - MySQL JOIN 在 PHP 中为多个 HTML 表排列结果

mysql - 在sql查询中添加来自另一个表的计数

haskell - 当输入值是Haskell中的Float类型而不是Integer类型时,如何创建错误消息

python - 更新嵌套列表在 python 中花费的时间太长

python - 如何在一个文件中存储多个networkx图?

Mysql多条件选择

ruby - 干燥重复的救援声明

c++/Parsing : error: expected primary-expression before '->' token . 如何解决这个错误..?