Jawaban:
Dari contoh ArcPy , sepertinya sys.exit()
ini adalah cara yang benar untuk mengakhiri skrip lebih awal.
The Python dokumentasi catatan yang sys.exit()
:
diimplementasikan dengan meningkatkan pengecualian SystemExit, sehingga tindakan pembersihan yang ditentukan oleh klausa terakhir dari pernyataan try dihormati, dan dimungkinkan untuk mencegat upaya keluar di tingkat luar.
Cara mudah untuk mengatasinya adalah dengan membungkus skrip Anda dalam penangan pengecualian:
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
Namun, ini tidak terlalu elegan dan membutuhkan restrukturisasi seluruh proyek Anda, belum lagi tingkat lekukan lain. Plus, dalam situasi yang tidak mungkin bahwa bagian lain dari kode Anda menimbulkan SystemExit
pengecualian Anda tidak akan pernah tahu tentang hal itu ... Solusi lain yang tidak disukai tapi mungkin lebih baik adalah dengan membungkus panggilan ke sys.exit () dalam fungsi lain:
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
Sekarang Anda dapat menelepon finish()
,, finish(1)
atau finish('Error message')
seperti yang Anda harapkan untuk dapat memanggil sys.exit ().
Tentu saja, kami mungkin ingin menggunakan pendekatan makan pengecualian kami dalam keadaan lain, dan karena ini adalah Python, kami dapat menggeneralisasi dan membuat dekorator serbaguna yang berguna:
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()