Вихід із сценарію з 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 - але, як Майкл, я не поруч із ArcGIS, тому я не міг сказати, як це обробляються.
om_henners

Ви намагалися підняти systemexit? У мене є програма python, яку я написав, де я використовую цей підхід у операторі if, намагаючись отримати список функцій у робочій області, і якщо він повертає порожній список, інші дзвінки підвищують systemexit (працює чудово - у мене дуже багато Вихід та друк файлів журналу теж тривають, тому я можу сказати, чому програма вийшла). Напевно, є кілька способів зробити це, а може бути і кращі способи, але цей робить те, що я очікував / хотів це зробити.
turkishgold

4
Ви бачили приклади в цій темі GSE gis.stackexchange.com/questions/1015/…

Відповіді:


2

Ні, спробуйте / крім блоку, який ви хочете, щоб у вас був "улов" отримати вихідний дзвінок; тож у вашій спробі ви зробили б щось подібне:

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

Це буде подано, якщо ваше повідомлення "якщо" не вдасться.


Я думав, окрім запуску лише тоді, коли є помилка підхоплення?
Chris Stayte
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.