Tôi đã thử sys.exit
, nhưng nó dường như không hoạt động trong ArcMap 10.
Bất cứ ai cũng biết làm thế nào để làm điều đó?
Tôi đã thử sys.exit
, nhưng nó dường như không hoạt động trong ArcMap 10.
Bất cứ ai cũng biết làm thế nào để làm điều đó?
Câu trả lời:
Từ các ví dụ của ArcPy , có vẻ như đây sys.exit()
là cách chính xác để chấm dứt một kịch bản sớm.
Các tài liệu Python ghi chú rằng sys.exit()
:
được triển khai bằng cách tăng ngoại lệ SystemExit, do đó, các hành động dọn dẹp được chỉ định bởi các mệnh đề thử cuối cùng được thực hiện và có thể chặn nỗ lực thoát ở cấp độ bên ngoài.
Cách dễ dàng để giải quyết vấn đề này là bọc tập lệnh của bạn trong một trình xử lý ngoại lệ:
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
Tuy nhiên, điều này không đặc biệt thanh lịch và đòi hỏi phải cấu trúc lại toàn bộ dự án của bạn, chưa kể đến một mức độ thụt lề khác. Ngoài ra, trong trường hợp không chắc là một phần khác trong mã của bạn sẽ đưa ra một SystemExit
ngoại lệ mà bạn sẽ không bao giờ biết về nó ... Một giải pháp không phù hợp nhưng có lẽ thích hợp hơn là bọc các lệnh gọi đến sys.exit () trong một hàm khác:
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
Bây giờ bạn có thể gọi finish()
, finish(1)
hoặc finish('Error message')
giống như bạn mong đợi để có thể gọi sys.exit ().
Tất nhiên, chúng tôi có thể muốn sử dụng phương pháp ăn ngoại lệ của mình trong các trường hợp khác và vì đây là Python, chúng tôi có thể khái quát hóa và tạo ra một công cụ trang trí đa năng, hữu ích:
import sys
import arcpy
def eat_exception(fn, exception):
def safe(*v, **k):
try:
fn(*v, **k)
except exception:
pass
return safe
finish = eat_exception(sys.exit, SystemExit)
#do stuff
finish()