สคริปต์ Python สิ้นสุดด้วยตนเองใน ArcMap?


คำตอบ:


16

จากตัวอย่าง ArcPyดูเหมือนว่าsys.exit()เป็นวิธีที่ถูกต้องในการยุติสคริปต์ก่อน

หลามเอกสารบันทึกว่าsys.exit():

ถูกนำมาใช้โดยการเพิ่มข้อยกเว้น SystemExit ดังนั้นการดำเนินการล้างข้อมูลที่ระบุไว้โดยส่วนสุดท้ายของคำสั่ง try จะได้รับการยกย่องและเป็นไปได้ที่จะสกัดกั้นความพยายามออกในระดับนอก

วิธีง่าย ๆ ในการจัดการกับสิ่งนี้คือการตัดสคริปต์ของคุณในตัวจัดการข้อยกเว้น:

import sys
import arcpy

try:
    #do stuff
    sys.exit(0)
except SystemExit:
    pass

อย่างไรก็ตามสิ่งนี้ไม่ได้สวยงามเป็นพิเศษและต้องการการปรับโครงสร้างของโครงการทั้งหมดของคุณไม่ต้องพูดถึงการเยื้องระดับอื่น นอกจากนี้ในสถานการณ์ที่ไม่น่าเป็นไปได้ที่ส่วนอื่นของรหัสของคุณทำให้เกิดSystemExitข้อยกเว้นคุณจะไม่เคยรู้เลย ... วิธีแก้ปัญหาที่ไม่สมควร แต่อาจจะดีกว่าก็คือการตัดการเรียกไปยัง sys.exit () ในฟังก์ชันอื่น:

import sys
import arcpy

def finish(arg=None):
    try:
        sys.exit(arg)
    except SystemExit:
        pass

#do stuff
finish()

ตอนนี้คุณสามารถโทรfinish(), finish(1)หรือfinish('Error message')เช่นเดียวกับที่คุณคาดว่าจะสามารถที่จะ sys.exit โทร ()

แน่นอนว่าเราอาจต้องการใช้วิธีการกินแบบยกเว้นในสถานการณ์อื่นและเนื่องจากนี่คือ Python เราจึงสามารถสรุปและสร้างมัณฑนากรอเนกประสงค์ที่มีประโยชน์และมีประโยชน์:

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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.