Ned Batchelder <n...@nedbatchelder.com> added the comment:

To add to the confusion, the treatment of "if __debug__:" and "if not 
__debug__:" is now asymmetric:

Here is debug.py:

import dis
import sys
print(sys.version)

def f():
    if __debug__:
        print("debug")
    else:
        print("not debug")
    if not __debug__:
        print("NOT DEBUG")
    else:
        print("DEBUG")

dis.dis(f)


$ python3.8 /tmp/debug.py
3.8.0b2 (default, Jul  4 2019, 22:38:04)
[Clang 10.0.0 (clang-1000.10.44.4)]
  7           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('debug')
              4 CALL_FUNCTION            1
              6 POP_TOP

 10           8 LOAD_CONST               2 (False)
             10 POP_JUMP_IF_FALSE       22

 11          12 LOAD_GLOBAL              0 (print)
             14 LOAD_CONST               3 ('NOT DEBUG')
             16 CALL_FUNCTION            1
             18 POP_TOP
             20 JUMP_FORWARD             8 (to 30)

 13     >>   22 LOAD_GLOBAL              0 (print)
             24 LOAD_CONST               4 ('DEBUG')
             26 CALL_FUNCTION            1
             28 POP_TOP
        >>   30 LOAD_CONST               0 (None)
             32 RETURN_VALUE

$ python3.8 -O /tmp/debug.py
3.8.0b2 (default, Jul  4 2019, 22:38:04)
[Clang 10.0.0 (clang-1000.10.44.4)]
  6           0 LOAD_CONST               1 (False)
              2 POP_JUMP_IF_FALSE       14

  7           4 LOAD_GLOBAL              0 (print)
              6 LOAD_CONST               2 ('debug')
              8 CALL_FUNCTION            1
             10 POP_TOP
             12 JUMP_FORWARD             8 (to 22)

  9     >>   14 LOAD_GLOBAL              0 (print)
             16 LOAD_CONST               3 ('not debug')
             18 CALL_FUNCTION            1
             20 POP_TOP

 11     >>   22 LOAD_GLOBAL              0 (print)
             24 LOAD_CONST               4 ('NOT DEBUG')
             26 CALL_FUNCTION            1
             28 POP_TOP
             30 LOAD_CONST               0 (None)
             32 RETURN_VALUE

In 3.7 (and earlier) the behavior was balanced:

$ python3.7 /tmp/debug.py
3.7.3 (default, Apr 10 2019, 10:27:53)
[Clang 10.0.0 (clang-1000.10.44.4)]
  7           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('debug')
              4 CALL_FUNCTION            1
              6 POP_TOP

 13           8 LOAD_GLOBAL              0 (print)
             10 LOAD_CONST               2 ('DEBUG')
             12 CALL_FUNCTION            1
             14 POP_TOP
             16 LOAD_CONST               0 (None)
             18 RETURN_VALUE

$ python3.7 -O /tmp/debug.py
3.7.3 (default, Apr 10 2019, 10:27:53)
[Clang 10.0.0 (clang-1000.10.44.4)]
  9           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('not debug')
              4 CALL_FUNCTION            1
              6 POP_TOP

 11           8 LOAD_GLOBAL              0 (print)
             10 LOAD_CONST               2 ('NOT DEBUG')
             12 CALL_FUNCTION            1
             14 POP_TOP
             16 LOAD_CONST               0 (None)
             18 RETURN_VALUE


Is this really the desired behavior?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37500>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to