2011-05-10 6 views
1

Quelqu'un pourrait-il m'aider à modifier ces scripts pour ignorer l'erreur et continuer à fonctionner? J'ai juste besoin de comprendre comment faire pour passer le script sur ces erreurs et terminer le reste des lignes.EOL arrête python sur Calculer le champ

Voici le script complet 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") 

Et voici l'erreur que je rencontre: retraçage (appel le plus récent en dernier):

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). 
+0

@ dr.parcel: Type de. Ce n'est toujours pas tout à fait vrai? –

+0

Quel que soit le script exécuté, ces commandes doivent correctement citer ou échapper la chaîne ou supprimer les retours à la ligne. Sans savoir ce qu'il y a dans le script, il n'y a pas grand chose à faire. –

+0

@ dr.parcel: "J'ai essayé d'échapper à des personnages pendant des mois" ?? Alors peut-être vous devriez demander * cette * question d'abord. En outre, pendant que vous y êtes, passez en revue les instructions de mise en forme du code et continuez à essayer d'obtenir que cette question soit lisible. –

Répondre

1

Première option: Enroulez le gp.CalculateField_management(...) dans un essayez/excepté, comme ceci:

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

Cela devrait permettre votre script t o continue, mais je ne suis pas sûr de ce que sera l'état de gp.

Une meilleure option consisterait à prétraiter chaque fichier et à gérer les champs contenant les nouvelles lignes incorporées; quelque chose comme:

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

et fix_bad_fields ressemble à quelque chose comme (vous aurez à la recherche de ce que je ne connais pas avec .SHP - Je vais faire semblant permet d'écrire de nouveau au même fichier, mais sinon vous « ll doivent faire une copie et renommer ainsi):

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

Beaucoup de devinettes dans les détails, mais nous espérons que vous donne une idée et suffisante pour continuer.