EOL останавливает питона на поле вычисления - PullRequest
1 голос
/ 10 мая 2011

Может ли кто-нибудь помочь мне изменить эти сценарии, чтобы игнорировать ошибку и продолжить работу? Мне просто нужно выяснить, как заставить скрипт пропустить эти ошибки и завершить остальные строки.

Вот полный скрипт 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).

1 Ответ

1 голос
/ 05 августа 2011

Первый вариант: обернуть gp.CalculateField_management(...) в попытку / исключение, например:

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()

Множество догадок в этих подробностях, но, надеюсь, это даст вам идею и достаточно для продолжения.

...