Perhaps you're trying to catch Exception and this is catching the SystemExit exception raised by sys.exit()?
import sys
try:
sys.exit(1) # Or something that calls sys.exit()
except SystemExit, e:
sys.exit(e)
except Exception:
# Cleanup and reraise. This will print a backtrace.
# (Insert your cleanup code here.)
raise
In general, catching Exception is a bad idea. You'll catch all kinds of stuff you don't want to catch -- like SystemExit -- and it can also mask your own programming errors. My example above is silly, unless you're doing something in terms of cleanup. You could replace it with:
import sys
sys.exit(1) # Or something that calls sys.exit().
If you need to exit without raising SystemExit:
import os
os._exit(1)
I do this, in code that runs under unittest and calls fork(). Unittest gets when the forked process raises SystemExit. This is definitely a corner case!