buhtz
buhtz

Reputation: 12152

Is there a difference between exit(0) and exit(True) in Python?

I don't like to use integers and can not remember (even in years) what they mean. So I would like to have constants for that.

Is there a difference between this two calls?

sys.exit(0)
sys.exit(True)

Or are there other contstants for that?

The background of my question is that I had a situation where the caller of my script act different between the two cases.

Upvotes: 6

Views: 5352

Answers (2)

user559633
user559633

Reputation:

Using sys.exit(True) suggests to the user that the script exited with an error because it's non-zero:

Ξ /tmp → cat true_exit.py
import sys
sys.exit(True)
Ξ /tmp → python true_exit.py
↑1 /tmp → echo $?
1

If you want to use True/False instead of exit numbers, you can either define your own constants or use True/False:

Ξ /tmp → cat false_exit.py
import sys
sys.exit(False)
Ξ /tmp → python false_exit.py
Ξ /tmp → echo $?
0

Note that it may be helpful for other maintainers of your code if you use the same constants as defined in sysexits.h (probably available to you on *nix and OS X in /usr/include/sysexits.h).

Upvotes: 2

Meghdeep Ray
Meghdeep Ray

Reputation: 5537

From the official documentation for sys.exit() :

sys.exit([arg])

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.

The optional argument arg can be an integer giving the exit status (defaulting to zero), or another type of object. If it is an integer, zero is considered “successful termination” and any nonzero value is considered “abnormal termination” by shells and the like. Most systems require it to be in the range 0-127, and produce undefined results otherwise. Some systems have a convention for assigning specific meanings to specific exit codes, but these are generally underdeveloped; Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors. If another type of object is passed, None is equivalent to passing zero, and any other object is printed to stderr and results in an exit code of 1. In particular, sys.exit("some error message") is a quick way to exit a program when an error occurs.

Here True corresponds to 1.
Exit codes can be from 0 to 127 as they say in the documentation, you can choose which exit code you want to assign, it defaults to 0 though and True will correspond to 1.

Upvotes: 1

Related Questions