python – Difference between calling sys.exit() and throwing exception
sys.exit raises a
SystemExit itself so from a purely technical point of view theres no difference between raising that exception yourself or using
sys.exit. And yes you can catch
SystemExit exceptions like any other exception and ignore it.
So its just a matter of documenting your intent better.
PS: Note that this also means that
sys.exit is actually a pretty bad misnomer – because if you use
sys.exit in a thread only the thread is terminated and nothing else. That can be pretty annoying, yes.
Theres a small, subtle difference:
import sys try: sys.exit() except: print(Caught)
except statement catches the exception whereas:
import sys try: sys.exit() except Exception: print(Caught)
exits without error.
SystemExit exception (like
KeyboardInterrupt) isnt caught by
except Exception, but caught by
So if the caller catches everything with
except: (which is bad practice), your
sys.exit wont quit but will be considered as an error. Thats why
except Exception: is better to be sure to catch all exceptions except CTRL+C and system exit (which are of the