Open
Description
Bug report
Bug description:
The documentation of sys.exit
says “The optional argument arg can be an integer giving the exit status (defaulting to zero), or another type of object. [...] 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.” This is no longer true for 0- and 1-element tuples in Python 3.12 and later. It acts like the argument is unpacked: sys.exit(())
is treated like sys.exit()
and sys.exit((x,))
is treated like sys.exit(x)
.
$ python3.11 -c 'import sys; sys.exit(())'; echo $?
()
1
$ python3.12 -c 'import sys; sys.exit(())'; echo $?
0
$ python3.11 -c 'import sys; sys.exit((2,))'; echo $?
(2,)
1
$ python3.12 -c 'import sys; sys.exit((2,))'; echo $?
2
CPython versions tested on:
3.12, 3.13, CPython main branch
Operating systems tested on:
macOS
Metadata
Metadata
Assignees
Labels
(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)An unexpected behavior, bug, or errorAn unexpected behavior, bug, or error