Saya memiliki skrip alat arcpy untuk ArcGIS 10.0 yang memiliki dua bagian fungsional utama. Pengguna dapat memilih untuk menjalankan bagian kedua atau tidak. Jika pengguna memilih TIDAK untuk menjalankan bagian kedua, saya hanya ingin menjalankan fungsi pembersihan dan keluar dari skrip dengan sys.exit (0) tanpa memiliki pesan kesalahan yang diposting ke jendela hasil alat. Ada dua utas utama di sini di GIS-SE tentang keluar dari skrip arcpy, tetapi solusi di dalamnya tidak secara khusus menangani pesan kesalahan. Struktur umum kode adalah sebagai berikut:
import sys
##import arcpy
def CleanUp():
print 'Cleaning up ...\n'
def finish():
CleanUp()
print 'Exiting ...'
sys.exit(0)
do_more = False #or True ... input from user
#Section 1: do some stuff
print 'Doing some stuff ...\n'
if not do_more:
finish()
#Section 2: do more stuff
print 'doing more stuff ...'
CleanUp()
Jika saya menjalankan kode ini di interpreter Python di luar ArcGIS / arcpy, itu berfungsi seperti yang saya harapkan, keluar dengan anggun tanpa pesan kesalahan; Namun, dalam skrip arcpy saya dengan struktur yang sama ini, skrip keluar, tetapi pesan kesalahan SystemExit diposting ke jendela hasil alat. Apakah ada cara untuk membuat skrip alat arcpy memakan pengecualian dan mengubur pesan kesalahan SystemExit?
sumber
Jawaban:
Jawaban singkat: diperbaiki pada 10.1. Untuk saat ini, Anda perlu menambahkan lekukan ekstra. Ini mungkin mendorong beberapa refactoring berguna untuk kode Anda. Setiap kali Anda mendapatkan banyak baris dalam satu skrip / rutin, Anda tetap ingin memikirkan untuk memotongnya menjadi bagian yang lebih kecil (fungsi, kelas).
sumber
ArcPy mengacaukan lingkungan Python Anda . Singkatnya, jangan lakukan fungsi sys.exit () atau cari / panggil arcpy "clean-before-exit" (jika ada) sebelum memanggil sys.exit ().
sumber
sys.exit()
adalah semacam trik kotor - panggilanexit
menimbulkanSystemExit
pengecualian dan juru bahasa tingkat atas, yang biasanya mencetak traceback, akan mendeteksi jenis pengecualian dan mengakhiri juru bahasa. Menanamkan juru bahasa Python ke dalam aplikasi lain, seperti keluarga ArcGIS yang dapat dieksekusi, memerlukan sejumlah kode implementasi khusus seperti jumlah non-sepele seperti ini.Saya tidak tahu cara 'mengubur' pesan kesalahan SystemExit, tetapi Anda selalu bisa merestrukturisasi kode Anda untuk menghindari panggilan sys.exit
sumber