Khắc phục sự cố lỗi cú pháp Python ERROR 000989 từ ArcGIS Field Calculator?


8

Tôi đang cố gắng sử dụng cú pháp Python trong máy tính trường của ArcGIS 10 và hoàn toàn bối rối. Cho đến nay các tính toán cơ bản nhất đang làm tôi thất bại và tôi không hiểu tại sao. Tôi đang cố gắng tạo một hàm để đặt các giá trị của tất cả các ô trong một cột thành bội số của đối số mà tôi đưa vào (Tôi muốn thử một cái gì đó đơn giản để kiểm tra nó, vì bất cứ điều gì phức tạp hơn tôi cũng đã thử ). nhập mô tả hình ảnh ở đây

Tuy nhiên, các thông báo lỗi cho tôi biết rằng cú pháp của tôi không chính xác:

nhập mô tả hình ảnh ở đây

nhưng tôi không thể hiểu những gì không chính xác.


Bên cạnh đó, tôi cũng kinh hoàng về việc viết con trăn có thể đọc được trong hộp máy tính trường khó như thế nào vì không có cú pháp tô sáng, hoặc thụt lề rõ ràng. Sẽ nhanh hơn và dễ dàng hơn để viết một tập lệnh Python bên ngoài để thực hiện phép tính này, nhưng tôi muốn thử tìm hiểu xem hàm mới này hoạt động như thế nào trong chương trình.


4
Tôi đồng cảm với khiếu nại của bạn về việc thiếu tô sáng cú pháp. Tôi cũng sẽ nói thêm rằng hộp văn bản sử dụng phông chữ có chiều rộng thay đổi (thay vì phông chữ có chiều rộng cố định). Theo như tôi quan tâm, đó chỉ là nơi để dán mã được phát triển và thử nghiệm ở nơi khác (tôi sử dụng PythonWin).
Mike T

1
@Mike Làm thế nào để bạn đối phó với biến kiểm tra bằng cách sử dụng dữ liệu / biến hiện có? Tôi thường viết các kịch bản python hoàn toàn bên ngoài (sử dụng Geany). Tôi đã hy vọng không phải viết các chức năng trong code-block; Tôi chỉ muốn một cách nhanh chóng để thực hiện một phép tính phức tạp hơna + b
djq

Tôi sử dụng PythonWin cho mọi thứ (từ Python Win32 ). Quy trình công việc của tôi sẽ là phát triển một tập lệnh trong một tệp (ví dụ def test(var1): return var1*2), sau đó sao chép khối mã và nhấp chuột phải vào cửa sổ tương tác chọn "Thực thi mã python từ bảng tạm", sau đó kiểm tra / gỡ lỗi hàm với các giá trị có thể cho var1(ví dụ: test(4)nên trả lại 8). Đây là một phương pháp Python thuần túy để phát triển và thử nghiệm khối mã trước khi giới thiệu nó với ArcGIS.
Mike T

Câu trả lời:


12

Có thể là do bạn đang sử dụng tên trường trong đó tên tham số sẽ xuất hiện.

Thay vào đó, hãy thử một cái gì đó như:

def avg(paramName):
    return 10

6
Quy !field!ước chỉ hoạt động bên trong biểu thức, không phải trong khối mã. Bạn cũng có thể chỉ cần đặt 10biểu thức và để trống khối mã.
Jason Scheirer

Tôi vừa cập nhật ví dụ của mình - Tôi vẫn nhận được một lỗi. @Jason Tôi nhận ra rằng tôi có thể để trống khối mã nhưng tôi muốn thực hiện một phép tính phức tạp hơn một khi tôi hiểu cách thức hoạt động của nó.
djq

Bạn vẫn có một !field!khối mã của bạn.
Jason Scheirer

9

Như Jason Scheirer đã nhận xét, bạn không thể sử dụng! bên trong logic tiền kịch bản.

Logic trước tập lệnh:

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

avg_miles =

demo(!hshld_2000!,10)

Lưu ý: Một "mẹo" bạn có thể sử dụng để đơn giản hóa mớ hỗn độn này ... Bạn có thể sử dụng cửa sổ Lệnh tương tác trong ArcMap để tạo và kiểm tra mã python (chẳng hạn như xác định phương thức). Khi bạn đã làm mọi thứ hoạt động, bạn có thể tham khảo một phương thức python được tạo trong cửa sổ tương tác từ cửa sổ Tính toán trường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.