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