based on python wiki :
Since exit() ultimately “only” raises an exception, it will only exit the process when called from the main thread, and the exception is not intercepted.
And:
The exit function is not called when the program is killed by a signal, when a Python fatal internal error is detected, or when os._exit() is called.
Therefore, If you use sys.exit() within a try block python after raising the SystemExit exception python refuses of completing the exits's functionality and executes the exception block.
Now, from a programming perspective you basically don't need to put something that you know definitely raises an exception in a try block. Instead you can either raise a SystemExit exception manually or as a more Pythonic approach if you don't want to loose the respective functionalities of sys.exit() like passing optional argument to its constructor you can call sys.exit() in a finally, else or even except block.
Method 1 (not recommended)
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do raise SystemExit
else:
# do stuff and/or do raise SystemExit
finally:
# do stuff and/or do raise SystemExit
Method 2 (Recommended):
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do sys.exit(stat_code)
else:
# do stuff and/or do sys.exit(stat_code)
finally:
# do stuff and/or do sys.exit(stat_code)