Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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

share|improve this question
    
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 Apr 22 '11 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. –  turkishgold Apr 22 '11 at 11:03
4  
Did you see the examples in this GSE thread gis.stackexchange.com/questions/1015/… –  Dan Patterson Apr 22 '11 at 11:50
add comment

1 Answer

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.