I've got a Python script for ArcGIS that I'm working on, and I'd like to have the ability to have the script quit if it doesn't have the necessary data available. I tried a straight up sys.exit() but that would give an exception in ArcMap that I'd like to avoid. I found This thread that suggests using a try block, so I made this function:
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
Unfortunately, that didn't work either. Well, it doesn't make that error on ArcMap anymore, but it also doesn't, well, quit. Right now, I have the bulk of my code in an if/else statement, but that's ugly. Anybody have any other suggestions?
Thanks! Brian
-
In theory sys.exit(0) is an operation completed successfully exit - see msdn.microsoft.com/en-us/library/ms681381.aspx - but like Michael I'm not near ArcGIS so I couldn't tell you how it's handled.om_henners– om_henners2011年04月22日 04:13:21 +00:00Commented Apr 22, 2011 at 4:13
-
Have you tried raise systemexit? I have a python program I wrote where I use this approach in an if statement by trying to get a list of the features in a workspace, and if it returns an empty list the else calls raise systemexit (works great - I do have lots of log file output and printing going on too so I can tell why the program exited). Probably multiple ways to do this and maybe even better ways, but this one does what I expected/wanted it to do.MapBlast– MapBlast2011年04月22日 11:03:11 +00:00Commented Apr 22, 2011 at 11:03
-
4Did you see the examples in this GSE thread gis.stackexchange.com/questions/1015/…user681– user6812011年04月22日 11:50:27 +00:00Commented Apr 22, 2011 at 11:50
1 Answer 1
No, the try/except block you will want do have the 'catch' get your exit call; so in your try you would do something like this:
try:
if arcpy.Exists(parcelOutput):
arcpy.AddMessage("Calculating Parcel Numbers")
except:
raise sys.exit("Error: " + arcpy.GetMessages(x))
This will file if your 'if' statement fails.
-
I thought except only runs when there is an error to catch?Chris Stayte– Chris Stayte2016年09月11日 20:17:02 +00:00Commented Sep 11, 2016 at 20:17