[New-bugs-announce] [issue34876] Python3.8 changes how decorators are traced

Ned Batchelder report at bugs.python.org
Tue Oct 2 19:06:44 EDT 2018


New submission from Ned Batchelder <ned at nedbatchelder.com>:

When decorating a function, the sequence of lines reported to the trace function is different in Python3.8 than with previous versions

$ cat -n decorator.py
     1	def decorator(f):
     2	    return f
     3
     4	def f():
     5	    @decorator
     6	    @decorator
     7	    @decorator
     8	    def func():
     9	        pass
    10
    11	import sys
    12	def trace(frame, event, args):
    13	    print(frame.f_lineno, event)
    14	    return trace
    15
    16	sys.settrace(trace)
    17	f()

$ python3.7 decorator.py
4 call
5 line
6 line
7 line
1 call
2 line
2 return
1 call
2 line
2 return
1 call
2 line
2 return
7 return

$ python3.8 decorator.py
4 call
5 line
6 line
7 line
5 line
1 call
2 line
2 return
1 call
2 line
2 return
1 call
2 line
2 return
5 return

Is this intentional? Will it be changed back before 3.8 ships?

People are testing their projects against 3.8-dev, and reporting problems with coverage.  The problems are due to these sorts of changes.

----------
components: Interpreter Core
messages: 326921
nosy: nedbat
priority: normal
severity: normal
status: open
title: Python3.8 changes how decorators are traced
versions: Python 3.8

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue34876>
_______________________________________


More information about the New-bugs-announce mailing list