Skip to main content
 首页 » 编程设计

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

2025年05月04日11zhenyulu

我创建了一个简单的脚本来将 .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")