TIL: Recondite Python
This page is a collection of obscure facts about the Python programming language.
Table of Contents
the __debug__
constant
Python has a built-in boolean constant
named __debug__
.
It is set to True
whenever you run a REPL shell or call a script with the
python script.py
i.e. by default.
It is set to False
only when you pass the -O
or the -OO
flags to the python executable.
These flags are described in the Python manual page as:
-O
Remove assert statements and any code conditional on the value of debug;
augment the filename for compiled (bytecode) files by adding .opt-1 before the .pyc
extension.
-OO
Do -O
and also discard docstrings; change the filename for compiled
(bytecode) files by adding .opt-2 before the .pyc extension.
__debug__
in REPL shell
$ python3
Python 3.9.13 (main, May 24 2022, 21:28:31)
[Clang 13.1.6 (clang-1316.0.21.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> __debug__
True
$ python3 -O
Python 3.9.13 (main, May 24 2022, 21:28:31)
[Clang 13.1.6 (clang-1316.0.21.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> __debug__
False
__debug__
in scripts
$ cat script.py
print(__debug__)
$ python3 script.py
True
$ python3 -O script.py
False
$ python3 -OO script.py
False