Keluar dari skrip dengan Python

11

Saya punya skrip Python untuk ArcGIS yang sedang saya kerjakan, dan saya ingin memiliki kemampuan untuk membuat skrip berhenti jika tidak memiliki data yang diperlukan tersedia. Saya mencoba sys.exit () langsung tetapi itu akan memberikan pengecualian di ArcMap yang ingin saya hindari. Saya menemukan utas ini yang menyarankan menggunakan blok percobaan, jadi saya membuat fungsi ini:

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

Sayangnya, itu juga tidak berhasil. Yah, itu tidak membuat kesalahan pada ArcMap lagi, tetapi juga tidak, well, berhenti. Saat ini, saya memiliki sebagian besar kode saya dalam pernyataan if / else, tapi itu jelek. Adakah yang punya saran lain?

Terima kasih! Brian

Brian Buell
sumber
Dalam teori sys.exit (0) adalah operasi yang diselesaikan dengan sukses - lihat msdn.microsoft.com/en-us/library/ms681381.aspx - tetapi seperti Michael saya tidak dekat ArcGIS jadi saya tidak bisa memberi tahu Anda bagaimana caranya ditangani.
om_henners
Sudahkah Anda mencoba meningkatkan systemexit? Saya punya program python yang saya tulis di mana saya menggunakan pendekatan ini dalam pernyataan if dengan mencoba untuk mendapatkan daftar fitur dalam ruang kerja, dan jika ia mengembalikan daftar kosong yang lain memanggil kenaikan systemexit (berfungsi dengan baik - saya punya banyak log output file dan pencetakan juga terjadi sehingga saya bisa tahu mengapa program ini keluar). Mungkin banyak cara untuk melakukan ini dan mungkin cara yang lebih baik, tetapi yang ini melakukan apa yang saya harapkan / inginkan.
turkishgold
4
Apakah Anda melihat contoh di utas GSE ini gis.stackexchange.com/questions/1015/...

Jawaban:

2

Tidak, coba / kecuali blok yang Anda inginkan memiliki 'menangkap' mendapatkan panggilan keluar Anda; jadi dalam percobaan Anda, Anda akan melakukan sesuatu seperti ini:

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

Ini akan mengajukan jika pernyataan 'jika' Anda gagal.

Benar
sumber
Saya pikir kecuali hanya berjalan ketika ada kesalahan untuk menangkap?
Chris Stayte