Arcpy.MakeFeatureLayer trong bộ nhớ vẫn tồn tại khi bước tiếp theo thất bại trong quá trình thử nghiệm


9

Khi tôi sử dụng arcgisscripting để tạo lớp đầu ra trong bộ nhớ với gp.makefeaturelayer, tôi sẽ đặt nó trong một khối thử / ngoại trừ và xóa đối tượng gp trong phần ngoại trừ khi makefeaturelayer không thành công. Bây giờ khi tôi đang sử dụng arcpy, có vẻ như tôi cần phải đóng cửa sổ nhàn rỗi và mở lại để có được lớp đầu ra trong bộ nhớ bị xóa.

Làm thế nào tôi có thể có lớp đầu ra từ công cụ makefeaturelayer của mình bị xóa trong một khối thử / ngoại trừ? Cảm ơn.


Một lớp tính năng là một đại diện nhẹ của một lớp đối tượng. Có một lý do cụ thể nó phải được xóa?
blah238

Khi tôi đang tạo một lớp tính năng trong bộ nhớ và sau đó bước tiếp theo không thành công..Tôi thực hiện điều chỉnh và chạy lại tập lệnh ở chế độ chờ nhưng sau đó tôi nhận được "lớp tính năng" đã tồn tại nên tôi phải đóng cửa không hoạt động và khởi động lại..it mất thêm thời gian
Justin

Tạo lớp tính năng không tạo bất kỳ dữ liệu nào, chỉ có chế độ xem một số dữ liệu hiện có. Có lẽ bạn đang tạo một lớp tính năng trong bộ nhớ thay thế? Nếu vậy tôi sẽ sử dụng đề xuất của Dan để ghi đè lên lớp tính năng trong bộ nhớ. Nó cũng sẽ là một ý tưởng tốt để xóa lớp tính năng trong bộ nhớ khi bạn không còn cần nó nữa, bởi vì nó sẽ tiếp tục chiếm bộ nhớ cho đến khi ứng dụng thoát ra.
blah238

Xem Làm việc với các lớp và chế độ xem bảng trong trợ giúp để được giải thích rõ hơn về lớp tính năng là gì.
blah238

Câu trả lời:



8

Kể cả

arcpy.env.overwriteOutput = True

trong tập lệnh của bạn sẽ ghi đè lên bất kỳ phiên bản trước nào của tệp mà không phải xóa các phiên bản "xấu".


2
nên làarcpy.env.overwriteOutput = True
Josh Werts

7

Xóa lớp tính năng trong khối mã ngoại trừ sẽ không hoạt động. Nếu bạn đang ở trong khối ngoại trừ mã, lớp tính năng không được tạo.

Tôi khuyên bạn nên thêm một khối mã cuối cùng sẽ được thực thi cho dù khối thử có thành công hay không. Nếu bạn làm điều này, bạn nên đảm bảo lớp tính năng tồn tại trước khi bạn có thể xóa nó.

try:
    arcpy.MakeFeatureLayer_management(inFeatureClass, "outFeatureLayer", {whereClause})
except:
    print arcpy.GetMessages()
finally:
    if arcpy.Exists("outFeatureLayer"):
        arcpy.Delete_management("outFeatureLayer")
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.