ฉันลองsys.exitแล้ว แต่ดูเหมือนจะไม่ทำงานใน ArcMap 10
ใครรู้วิธีการทำ
ฉันลองsys.exitแล้ว แต่ดูเหมือนจะไม่ทำงานใน ArcMap 10
ใครรู้วิธีการทำ
คำตอบ:
จากตัวอย่าง 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()