ออกจากสคริปต์ด้วย Python


11

ฉันมีสคริปต์ Python สำหรับ ArcGIS ที่ฉันใช้งานอยู่และฉันต้องการให้สคริปต์หยุดทำงานหากไม่มีข้อมูลที่จำเป็นอยู่ ฉันลอง sys.exit () โดยตรง แต่นั่นจะให้ข้อยกเว้นใน ArcMap ที่ฉันต้องการหลีกเลี่ยง ฉันพบกระทู้นี้ที่แนะนำให้ใช้บล็อกลองดังนั้นฉันทำฟังก์ชั่นนี้:

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

น่าเสียดายที่มันไม่ได้ผลเช่นกัน มันไม่ได้ทำให้เกิดข้อผิดพลาดบน ArcMap อีกต่อไป แต่ก็ไม่ได้เช่นกันเลิกกัน ตอนนี้ฉันมีรหัสจำนวนมากของฉันในคำสั่ง if / else แต่มันก็น่าเกลียด ใครมีข้อเสนอแนะอื่น ๆ ?

ขอบคุณ! ไบรอัน


ในทางทฤษฎี sys.exit (0) เป็นการดำเนินการที่สำเร็จแล้วออกจาก - ดูmsdn.microsoft.com/en-us/library/ms681381.aspx - แต่เหมือน Michael ฉันไม่ได้อยู่ใกล้ ArcGIS ดังนั้นฉันจึงไม่สามารถบอกคุณได้ว่ามันเป็นอย่างไร จัดการ
om_henners

คุณได้ลองยกระบบออกแล้วหรือยัง? ฉันมีโปรแกรมหลามฉันเขียนที่ฉันใช้วิธีนี้ในคำสั่ง if โดยพยายามรับรายการคุณสมบัติในเวิร์กสเปซและหากส่งคืนรายการว่างเปล่าจะมีการเรียกใช้ระบบอื่นเพิ่มขึ้น (ใช้งานได้ดี - ฉันมีจำนวนมาก เอาต์พุตของล็อกไฟล์และการพิมพ์ก็เกิดขึ้นเช่นกันดังนั้นฉันจึงสามารถบอกได้ว่าทำไมโปรแกรมถึงออก) อาจมีหลายวิธีในการทำเช่นนี้และอาจจะดีกว่านี้ แต่วิธีนี้ทำในสิ่งที่ฉันคาดไว้ / อยากให้ทำ
turkishgold

4
คุณเห็นตัวอย่างในเธรด GSE นี้ gis.stackexchange.com/questions/1015/ หรือไม่

คำตอบ:


2

ไม่บล็อกลอง / ยกเว้นที่คุณต้องการจะมี 'catch' ได้รับการโทรออก ดังนั้นในการลองของคุณคุณจะทำสิ่งนี้:

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

ไฟล์นี้จะบันทึกหากคำสั่ง 'ถ้า' ของคุณล้มเหลว


ฉันคิดว่ายกเว้นทำงานเฉพาะเมื่อมีข้อผิดพลาดที่จะจับ?
Chris Stayte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.