Выйти из скрипта с Python

11

У меня есть скрипт Python для ArcGIS, над которым я работаю, и я хотел бы иметь возможность завершить работу скрипта, если в нем нет необходимых данных. Я попытался использовать sys.exit (), но это дало бы исключение в ArcMap, которого я бы хотел избежать. Я нашел этот поток, который предлагает использовать блок try, поэтому я сделал эту функцию:

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
Вы пытались поднять системэксит? У меня есть программа на python, которую я написал, где я использую этот подход в операторе if, пытаясь получить список функций в рабочем пространстве, и, если он возвращает пустой список, вызовы else поднимают systemexit (отлично работает - у меня есть много вывод файла журнала и печать продолжаются, так что я могу сказать, почему программа вышла). Вероятно, есть несколько способов сделать это, и, возможно, даже лучше, но этот делает то, что я ожидал / хотел, чтобы он сделал.
turkishgold
4
Вы видели примеры в этой теме GSE gis.stackexchange.com/questions/1015/...

Ответы:

2

Нет, блок try / Кроме того, что вы захотите, будет иметь «catch» для получения вашего выхода; так что в вашей попытке вы бы сделали что-то вроде этого:

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

Это будет файл, если ваш оператор «если» не удается.

DEWright
источник
Я думал, кроме только работает, когда есть ошибка, чтобы поймать?
Крис Stayte