1

谁能帮我修改这些脚本以忽略错误并继续运行?我只需要弄清楚如何让脚本跳过这些错误并完成其余的行。

这是完整的 Python 脚本:

# Import system modules
import sys, string, os, arcgisscripting

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

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

for fc in fcs:
print fc
gp.CalculateField_management(fc + "\\Parcels.shp", "SIT_FULL_S", "myfunction(!SIT_HSE_NU!,!SIT_FULL_S!)", "PYTHON", "def myfunction(fld1,fld2):\n if (fld1=='0'or fld1=='00'or fld1<'00000000000'):\n   return ''\n else:\n   return fld2")

这是我遇到的错误: Traceback(最近一次调用最后一次):

  File "C:\Documents and Settings\Andrew\Desktop\HOUSENUMERZERO.py", line 18, in
 <module>

ERROR 000539: Error running expression: myfunction

(" ","69 FLOOD ST
") <type 'exceptions.SyntaxError'>: EOL while scanning single-quoted string (<st
ring>, line 1)

Failed to execute (CalculateField).
4

1 回答 1

1

第一个选项:将 包装gp.CalculateField_management(...)在 try/except 中,如下所示:

try:
    gp.CalculateField_management(...)
except SyntaxError:
    pass

这应该允许您的脚本继续运行,但我不确定gp会是什么状态。

更好的选择是预处理每个文件,并处理其中嵌入了换行符的字段;就像是:

for fc in fcs:
    fix_bad_fields(fp)
    gp.Calculatate...

和 fix_bad_fields 看起来像(你必须研究这个,因为我不熟悉 .shp 文件 - 我会假装它允许写回同一个文件,但如果不是你必须做一些复制和重命名为出色地):

def fix_bad_fields(filename):
    data_file = open_shp_file(filename)
    for row in data_file:
        row[0] = row[0].replace('\n', '')
        row[1] = row[1].replace('\n', '')
        row1.put_changes_on_disk() # force changes to disk (may not be necessary)
    data_file.close()

在这些细节上有很多猜测,但希望这能给你一个想法,足以让你继续下去。

于 2011-08-04T20:41:29.327 回答