エラーのトラブルシューティング000989 ArcGIS Field CalculatorからのPython構文エラー?


8

ArcGIS 10のフィールド計算機でPython構文を使用しようとしていますが、完全に混乱しています。これまでのところ、最も基本的な計算は失敗しており、その理由はわかりません。私は、列のすべてのセルの値を、渡す引数の倍数になるように設定する関数を作成しようとしています(もっと複雑なものも失敗したため、テストするために簡単なものを試したかったのですが) )。 ここに画像の説明を入力してください

ただし、エラーメッセージから、構文が正しくないことがわかります。

ここに画像の説明を入力してください

しかし、何が間違っているのか理解できません。


余談ですが、構文の強調表示や明確なインデントがないため、フィールド計算機ボックスに読みやすいpythonを記述するのがどれほど難しいかについても私は恐怖に思っています。この計算を行うための外部Pythonスクリプトを作成する方が速くて簡単ですが、この新しい関数がプログラム内でどのように機能するかを理解したいと思います。


4
構文強調表示の欠如についてのあなたの不満に同情します。また、テキストボックスが(固定幅フォントではなく)可変幅フォントを使用することも追加します。私に関する限り、他の場所で開発およびテストされたコードを貼り付ける場所にすぎません(私はPythonWinを使用しています)。
Mike T

1
@マイク既存のデータ/変数を使用して変数をテストするにはどうすればよいですか?私は通常、(Geanyを使用して)完全に外部のpythonスクリプトを作成します。で関数を書く必要すらないことを望んでいましたcode-block。私は、より複雑な計算を行う簡単な方法が欲しかったa + b
djq

私はすべてにPythonWinを使用しています(Python Win32から)。私のワークフローは、ファイル(例:)でスクリプトを開発しdef test(var1): return var1*2、コードブロックをコピーして、インタラクティブウィンドウで右クリックし、[クリップボードからpythonコードを実行する]を選択して、可能な値var1(例:test(4)8)を返す必要があります。これは、ArcGISに導入する前にコードブロックを開発およびテストする純粋なPythonの方法です。
Mike T

回答:


12

これは、パラメーター名が必要なフィールド名を使用していることが原因である可能性があります。

代わりに、次のようなことを試してください:

def avg(paramName):
    return 10

6
!field!大会は、だけでなく、コードブロックで、式の中で動作します。また10、式として入力し、コードブロックを空白のままにすることもできます。
Jason Scheirer、2011

私の例を更新しました-まだエラーが発生します。@ジェイソン私はコードブロックを空白のままにできることを理解していますが、これがどのように機能するかを理解したら、より複雑な計算を実行したいと思います。
djq

あなたはまだ!field!あなたのコードブロックにあります。
Jason Scheirer、2011

9

Jason Scheirerがコメントしたように、!field!は使用できません。プレスクリプトロジックの内部。

事前スクリプトロジック:

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

avg_miles =

demo(!hshld_2000!,10)

注:この混乱を単純化するために使用できる「トリック」... ArcMapのインタラクティブなコマンドウィンドウを使用して、Pythonコード(メソッドの定義など)を作成およびテストできます。物事がうまくいったら、フィールドの計算ウィンドウからインタラクティブウィンドウで作成されたpythonメソッドを参照できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.