2 votos

Herramienta de cálculo de valores de ArcGIS - Error de sintaxis de Python

Tengo una clase de característica dentro de una geodatabase de archivos.

Estoy utilizando el iterador "Iterar selección de filas" en el Model Builder para leer cada fila de la FC. A continuación, utilizo la herramienta "Get Field Value" para leer los siguientes 3 campos de cada fila:

"Estado"

"Usuario"

"Azulejos"

A continuación, quiero utilizar la herramienta "Calcular valor" para devolver una cadena, que luego utilizaré como ruta de acceso para copiar un archivo específico. La lógica es la siguiente: Si el "Estado" es "Disponible", devuelve C:\Data\ + "Azulejo" en caso contrario, devuelve C:\Data\ + "Azulejo" + _ + "Usuario"

En la herramienta Calcular Valor, he puesto lo siguiente en el campo de expresión:

a("%Status%", "%User%", "%Tile%")

He puesto lo siguiente en el bloque de código:

def a(Status, User, Tile):
    if Status == "Available":
        return "C:\Data\" + Tile
    else:
        return "C:\Data\" + "Tile" + "_" + User

Tengo el "Tipo de datos" establecido como cadena.

Mi modelo es el siguiente:

enter image description here

Obtengo el siguiente error para mi bloque de código:

    ERROR 000989
Python syntax error: Parsing error SyntaxError: EOL while scanning string literal (line 3)

Estoy feliz de tener una solución usando model builder o usando un stand along python script.

4voto

Elliott Maynard Puntos 11

Deberías escapar de la \ carácter, de esta manera:

def a(Status, User, Tile):
    if Status == "Available":
        return "C:\\Data\\" + Tile
    else:
        return "C:\\Data\\" + "Tile" + "_" + User

1voto

Roel Schroeven Puntos 111

El problema, tal y como se indica en la respuesta de gcarillo, son los únicos \ caracteres, especialmente antes de la comilla de cierre.

Algunas soluciones:

  • Utilice / en lugar de \ . Windows normalmente utiliza barras invertidas, pero las barras inclinadas también funcionan, excepto en el símbolo del sistema (cmd.exe).
  • Las cadenas en bruto pueden ser útiles, pero no ayudan con las cadenas que terminan en una barra invertida.
  • Mi solución favorita en casos como éste: utilizar os.path.join() en lugar de delimitadores de ruta codificados.

Ejemplo usando os.path.join():

import os.path

def a(Status, User, Title):
    if Status == "Available":
        return os.path.join("C:", "Data", Tile)
    else:
        return os.path.join("C:", "Data", "Tile_" + User) # Or did you mean os.path.join("C:", "Data", Tile + "_" + User) ?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X