Thoát khỏi tập lệnh với Python


11

Tôi đã có một tập lệnh Python cho ArcGIS mà tôi đang làm việc và tôi muốn có khả năng thoát tập lệnh nếu nó không có sẵn dữ liệu cần thiết. Tôi đã thử dùng sys.exit () ngay lập tức nhưng điều đó sẽ tạo ra một ngoại lệ trong ArcMap mà tôi muốn tránh. Tôi tìm thấy Chủ đề này gợi ý sử dụng một khối thử, vì vậy tôi đã thực hiện chức năng này:

def quit_script(message):
log_msg(message) # already defined; writes a message to a file
if log_loc:
    output.close() # close the file used with log_msg()
try:
    sys.exit()
except SystemExit:
    pass

Thật không may, điều đó cũng không làm việc. Chà, nó không còn gây ra lỗi đó trên ArcMap nữa, nhưng nó cũng không thoát ra được. Ngay bây giờ, tôi có phần lớn mã của mình trong câu lệnh if / other, nhưng điều đó thật xấu xí. Bất cứ ai có bất kỳ đề nghị khác?

Cảm ơn! Brian


Trong lý thuyết sys.exit (0) là một thao tác đã hoàn thành thoát - xem msdn.microsoft.com/en-us/l Library / ms681381.aspx - nhưng giống như Michael Tôi không ở gần ArcGIS nên tôi không thể nói cho bạn biết nó như thế nào xử lý.
om_henners

Bạn đã thử nâng systemexit chưa? Tôi có một chương trình python tôi đã viết ở đó tôi sử dụng cách tiếp cận này trong câu lệnh if bằng cách cố gắng lấy danh sách các tính năng trong không gian làm việc và nếu nó trả về một danh sách trống thì các cuộc gọi khác sẽ nâng systemexit (hoạt động rất tốt - tôi có rất nhiều đăng nhập và in tệp đang diễn ra quá để tôi có thể biết tại sao chương trình thoát ra). Có thể có nhiều cách để làm điều này và thậm chí có thể là cách tốt hơn, nhưng cách này thực hiện những gì tôi mong đợi / muốn nó làm.
thổ nhĩ kỳ

4
Bạn có thấy các ví dụ trong này GSE chủ đề gis.stackexchange.com/questions/1015/...

Câu trả lời:


2

Không, khối thử / ngoại trừ bạn sẽ muốn có 'bắt' nhận cuộc gọi thoát của bạn; Vì vậy, trong nỗ lực của bạn, bạn sẽ làm một cái gì đó như thế này:

try:
    if arcpy.Exists(parcelOutput):
    arcpy.AddMessage("Calculating Parcel Numbers")    
except:
    raise sys.exit("Error: " + arcpy.GetMessages(x))

Điều này sẽ nộp nếu tuyên bố 'nếu' của bạn không thành công.


Tôi nghĩ ngoại trừ chỉ chạy khi có lỗi để bắt?
Chris Stayte
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.