6 votos

FindLabel no se define en el etiquetado de ArcMap con Python Parser?

Estoy intentando hacer una expresión de etiqueta avanzada usando el parser de python y sigo obteniendo el siguiente error:

The expression contains an error.  
Modify the expression and try again.

Error 0 on line 0.   
Error running expression: FindLabel()   
Traceback (most recent call last):    
 File "<expression>", line 1, in <module>   
NameError: name 'FindLabel' is not defined  

enter image description here

def FindLabel ( [Direction] ):
  return  "{}° {}' {}\"".format( [Direction].split("-"))

¿Puede alguien decirme por qué no se define FindLabel?

7voto

auramo Puntos 161

Creo que hay un error en su parser ya que no estoy obteniendo un comportamiento idéntico entre un prompt de Python y el evaluador de la expresión de la etiqueta.

Pruebe lo siguiente como solución:

def FindLabel ( [Direction] ):
    return "{}° {}' {}".format(*[Direction].split('-')) + chr(34)

Había dos problemas:

  1. Debido a un error en el parser de ESRI (esto es legal en Python puro), no puedes escapar de una comilla doble con una barra invertida si la cadena está rodeada de comillas dobles. Del mismo modo, no se puede escapar de una comilla simple con una barra invertida si la cadena está rodeada de comillas simples, aunque esto también es legal en Python puro. Las cadenas entre comillas triples tampoco funcionan igual que en un prompt de Python.

    Ejemplos que funcionan en un prompt de Python pero no en una expresión de etiqueta de Python:

    • "I am 6'2\" tall."
    • """I am 6'2" tall."""
    • 'I am 6\'2" tall.'
    • '''I am 6'2" tall.'''

    Para evitarlo, puede concatenarla o formatearla en la cadena por separado.

  2. El str.format() espera args o kwargs, no una secuencia. Puede utilizar la función * operador a desempaquetar una secuencia en argumentos que es lo que hice arriba, y funciona.


Nota al margen: dado que se trata de una línea única, puede desmarcar la casilla "Avanzado" y utilizar simplemente la expresión en lugar de una función completa:

"{}° {}' {}".format(*[Direction].split('-')) + chr(34)

0 votos

La única otra mención que pude encontrar para este error fue en los comentarios de esta idea de ArcGIS: Expresiones de etiquetas avanzadas con ArcPy

0 votos

¡Gracias blah238! Fui con la sintaxis no avanzada y funcionó perfectamente.

-1voto

Paul Puntos 555

En realidad, debería dar un error de sintaxis indicando que el bloque de código no es válido, porque eso es lo que ocurre aquí.

Debería ser así:

def FindLabel (Direction):
  return u"{}° {}' {}\"".format(Direction.split("-"))

0 votos

Los paréntesis son necesarios para que la expresión de la etiqueta funcione. Ver: resources.arcgis.com/es/help/main/10.1/index.html#//

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