Memecahkan masalah ERROR 000989 Kesalahan sintaksis python dari ArcGIS Field Calculator?

8

Saya mencoba menggunakan sintaksis Python di bidang kalkulator ArcGIS 10 dan saya benar-benar bingung. Sejauh ini perhitungan paling dasar gagal saya, dan saya tidak mengerti mengapa. Saya mencoba membuat fungsi untuk hanya mengatur nilai semua sel dalam kolom menjadi kelipatan argumen yang saya berikan (saya ingin mencoba sesuatu yang sederhana untuk mengujinya, karena apa pun yang lebih rumit yang saya coba juga gagal ). masukkan deskripsi gambar di sini

Namun, pesan kesalahan memberi tahu saya bahwa sintaks saya salah:

masukkan deskripsi gambar di sini

tapi saya tidak bisa mengerti apa yang salah.


Selain itu, saya juga ngeri betapa sulitnya menulis python yang bisa dibaca di kotak kalkulator lapangan karena tidak ada penyorotan sintaksis, atau lekukan yang jelas. Akan lebih cepat, dan lebih mudah untuk menulis skrip Python eksternal untuk melakukan perhitungan ini, tetapi saya ingin mencoba mencari tahu bagaimana fungsi baru ini bekerja di dalam program.

djq
sumber
4
Saya bersimpati dengan keluhan Anda tentang kurangnya penyorotan sintaksis. Saya juga akan menambahkan bahwa kotak teks menggunakan font lebar variabel (bukan font lebar tetap). Sejauh yang saya ketahui, itu hanya tempat untuk menempelkan kode yang dikembangkan dan diuji di tempat lain (saya menggunakan PythonWin).
Mike T
1
@ Mike Bagaimana Anda menangani variabel pengujian menggunakan data / variabel yang ada? Saya biasanya menulis skrip python yang sepenuhnya eksternal (menggunakan Geany). Saya berharap untuk tidak harus menulis fungsi di code-block; Saya hanya ingin cara cepat untuk melakukan perhitungan yang lebih rumit daripadaa + b
djq
Saya menggunakan PythonWin untuk semuanya (dari Python Win32 ). Alur kerja saya adalah mengembangkan skrip dalam file (misalnya def test(var1): return var1*2), lalu menyalin blok kode dan klik kanan di jendela interaktif memilih "Jalankan kode python dari clipboard", lalu uji / debug fungsi dengan nilai yang mungkin untuk var1(misalnya, test(4)harus mengembalikan 8). Ini adalah metode Python murni untuk mengembangkan dan menguji blok kode sebelum memperkenalkannya ke ArcGIS.
Mike T

Jawaban:

12

Mungkin karena Anda menggunakan nama bidang tempat nama parameter harus pergi.

Sebagai gantinya, coba sesuatu seperti:

def avg(paramName):
    return 10
Michael Todd
sumber
6
The !field!konvensi hanya bekerja di dalam ekspresi, tidak di blok kode. Anda juga bisa menempatkan 10sebagai ekspresi dan membiarkan blok kode kosong.
Jason Scheirer
Saya baru saja memperbarui contoh saya - saya masih mendapatkan kesalahan. @Jason saya sadar saya bisa membiarkan blok kode kosong tetapi saya ingin melakukan perhitungan yang lebih rumit setelah saya mengerti bagaimana ini bekerja.
djq
Anda masih memiliki !field!di blok kode Anda.
Jason Scheirer
9

Seperti komentar Jason Scheirer, Anda tidak bisa menggunakan! Field! di dalam logika pra-skrip.

Log Script Pra:

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

avg_miles =

demo(!hshld_2000!,10)

Catatan: "Trik" yang dapat Anda gunakan untuk menyederhanakan kekacauan ini ... Anda dapat menggunakan jendela Perintah interaktif di ArcMap untuk membuat dan menguji kode python (seperti metode pendefinisian). Setelah Anda berhasil, Anda dapat merujuk metode python yang dibuat di jendela interaktif dari jendela Calculate Field.

James Schek
sumber