I'm not entirely sure what you are asking, as far as I know sys.exit()
does not generate a traceback. If you try to execute your code as it is, sys.exit()
raises an unhandled NameError exception because you have not imported the "sys" module. Surrounding the call to sys.exit() with a try/except block will capture the NameError exception, but it will also capture the normal exception raised by sys.exit(), as per the documentation:
Exit from Python. This is implemented by raising the SystemExit
exception, so cleanup actions specified by finally clauses of try
statements are honored, and it is possible to intercept the exit
attempt at an outer level.
Here is a version that stops processing once it encounters an error.
import sys
try:
a = 'i' / 1
print 'Does this work yet?'
except TypeError:
print "I should stop processing now"
sys.exit()
print 'I did not stop processing '
If this code is in your main module, I suggest wrapping your entry-point code up like this:
import sys
def main():
try:
a = 'i' / 1
print 'Does this work yet?'
except TypeError:
print "I should stop processing now"
return 1
print 'I did not stop processing '
return 0
if __name__ == "__main__": sys.exit(main())
This way you only ever have one call to sys.exit(), and it returns an error code indicating if there was a problem. If your code is not in the top-level entry point, I suggest you just throw the exception up until it gets to the main() method, where it can then return the error code value. You can wrap the real exception in a new "StopMyApplicationException" that you have to define.
Oh, and if you want to print the traceback, you can use the traceback
module, something like traceback.print_exc()
will do the job.