Solução de problemas ERRO 000989 Erro de sintaxe do Python da ArcGIS Field Calculator?

8

Estou tentando usar a sintaxe Python na calculadora de campo do ArcGIS 10 e estou completamente confuso. Até agora, os cálculos mais básicos estão falhando comigo, e eu não entendo o porquê. Estou tentando criar uma função para definir apenas os valores de todas as células em uma coluna para ser um múltiplo do argumento que passo (eu queria tentar algo simples para testá-lo, pois qualquer coisa mais complicada que eu tentei também falhou ) insira a descrição da imagem aqui

No entanto, as mensagens de erro estão dizendo que minha sintaxe está incorreta:

insira a descrição da imagem aqui

mas não consigo entender o que está incorreto.


Além disso, também estou horrorizado com a dificuldade de escrever python legível na caixa da calculadora de campo, pois não há realce de sintaxe ou recuo claro. Seria mais rápido e fácil escrever um script Python externo para fazer esse cálculo, mas quero tentar descobrir como essa nova função funcionou dentro do programa.

djq
fonte
4
Simpatizo com a sua reclamação sobre a falta de destaque da sintaxe. Também acrescentarei que a caixa de texto usa uma fonte de largura variável (em vez de uma fonte de largura fixa). Para mim, é apenas um lugar para colar código desenvolvido e testado em outro lugar (eu uso o PythonWin).
Mike T
1
@ Mike Como você lida com o teste de variáveis ​​usando os dados / variáveis ​​existentes? Eu normalmente escrevo scripts python que são completamente externos (usando o Geany). Eu esperava não precisar nem escrever funções no code-block; Eu só queria uma maneira rápida de fazer um cálculo mais complicado do quea + b
DJQ
Eu uso o PythonWin para tudo (do Python Win32 ). Meu fluxo de trabalho seria desenvolver um script em um arquivo (por exemplo def test(var1): return var1*2), copiar o bloco de código e clicar com o botão direito do mouse na janela interativa escolhendo "Executar código python da área de transferência" e testar / depurar a função com valores possíveis para var1(por exemplo, test(4)deve retornar 8). É um método Python puro de desenvolver e testar o bloco de código antes de introduzi-lo no ArcGIS.
Mike T

Respostas:

12

Pode ser porque você está usando um nome de campo para onde deve ir o nome de um parâmetro.

Em vez disso, tente algo como:

def avg(paramName):
    return 10
Michael Todd
fonte
6
A !field!convenção funciona apenas dentro da expressão, não no bloco de código. Você também pode colocar 10como expressão e deixar o bloco de código em branco.
precisa saber é o seguinte
Acabei de atualizar meu exemplo - ainda estou recebendo um erro. @ Jason Percebo que poderia deixar o bloco de código em branco, mas quero fazer um cálculo mais complicado assim que entender como isso funciona.
perfil completo de djq
Você ainda tem um !field!no seu bloco de código.
Jason Scheirer
9

Como Jason Scheirer comentou, você não pode usar! Field! dentro da lógica pré-script.

Lógica pré-script:

def demo(value, arg):
   return value * arg

avg_miles =

demo(!hshld_2000!,10)

Nota: Um "truque" que você pode usar para simplificar essa bagunça ... Você pode usar a janela de comando interativa no ArcMap para criar e testar o código python (como definir métodos). Depois de fazer as coisas funcionarem, você pode fazer referência a um método python criado na janela interativa na janela Calcular campo.

James Schek
fonte