有人能帮我修改这些脚本以忽略错误并继续运行吗? 我只需要弄清楚如何使脚本跳过这些错误并完成其余的行。
以下是完整的 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")
这是我遇到的错误:回溯(最近一次调用):
File "C:Documents and SettingsAndrewDesktopHOUSENUMERZERO.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).
第一个选项:将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()
在这些细节上有很多猜测,但希望这能给你一个想法,并足以继续下去。