Search code examples
pythonexit-code

What is Python's default exit code?


Assuming your script doesn't exit due to any kind of failure (exception, syntax error) and the script doesn't exit due to sys.exit() or os._exit(), how does Python figure out what exit code to exit with?

It seems to be 0, which makes sense since it indicates no-error on *nix systems. However, will that always be the case that it exits with 0 (except for the cases above)? Surprisingly after quite a bit of online searching, I couldn't find anything which explicitly said that it would exit with 0 unless otherwise specified.


Solution

  • sys.exit documents a default exit status of 0, and os._exit's docs specify a UNIX-like OS constant for "normal" exit status, os.EX_OK, but there is no documented guarantee I can find for the exit status in general.

    Aside from that, the best I can give you is that in CPython, the python executable (including python.exe/pythonw.exe on Windows) is implemented in python.c by calling Py_Main and returning whatever it returns; per the documented guarantees on Py_Main, the exit status is:

    0 if the interpreter exits normally (i.e., without an exception), 1 if the interpreter exits due to an exception, or 2 if the parameter list does not represent a valid Python command line.

    Note that if an otherwise unhandled SystemExit is raised, this function will not return 1, but exit the process, as long as Py_InspectFlag is not set.

    so this implies that simply running off the end of the __main__ module without an active exception should always return 0 for CPython, though alternate interpreters are not technically required to do the same.

    This tracks with the implied exit status rules expected of most applications; while nothing explicitly says Python has to follow those rules, it would be extremely unusual for a tool that grew up in the command line UNIX-like world to violate those conventions.