ฉันลอง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()