[issue11992] sys.settrace doesn't disable tracing if a local trace function returns None

2017-01-18 Thread Armin Rigo

Armin Rigo added the comment:

Confirmed.  More interestingly, nowadays (at least in 3.5) test_pdb.py depends 
on this bug.  If we really clear f->f_trace when the trace function returns 
None, then test_pdb_until_command_for_generator() fails.  This is because 
pdb.py incorrectly thinks there is no breakpoint in the generator function, and 
returns None.  This doesn't actually clear anything, and so it works anyway.

I'd suggest to fix the documentation to reflect the actual behavior of all 
versions from 2.3 to (at least) 3.5.

--
nosy: +arigo

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11992] sys.settrace doesn't disable tracing if a local trace function returns None

2013-12-21 Thread Xavier de Gaye

Xavier de Gaye added the comment:

See also issue 20040.

--
nosy: +xdegaye

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11992
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11992] sys.settrace doesn't disable tracing if a local trace function returns None

2011-05-03 Thread Ned Batchelder

New submission from Ned Batchelder ned...@users.sourceforge.net:

The docs say:

The trace function is invoked (with event set to 'call') whenever a new 
local scope is entered; it should return a reference to a local trace function 
to be used that scope, or None if the scope shouldn’t be traced.

The local trace function should return a reference to itself (or to another 
function for further tracing in that scope), or None to turn off tracing in 
that scope.

It's that last part that's wrong: returning None from the trace function only 
has an effect on the first call in a new frame.  Once the trace function 
returns a function for a frame, returning None from subsequent calls is 
ignored.  A local trace function can't turn off tracing in its scope.

To demonstrate:

import sys

UPTO_LINE = 1

def t(frame, event, arg):
num = frame.f_lineno
print(line %d % num)
if num  UPTO_LINE:
return t

def try_it():
print(twelve)
print(thirteen)
print(fourteen)
print(fifteen)

UPTO_LINE = 1
sys.settrace(t)
try_it()

UPTO_LINE = 13
sys.settrace(t)
try_it()

Produces:

line 11
twelve
thirteen
fourteen
fifteen
line 11
line 12
twelve
line 13
thirteen
line 14
fourteen
line 15
fifteen
line 15

The first call to try_it() returns None immediately, preventing tracing for the 
rest of the function.  The second call returns None at line 13, but the rest of 
the function is traced anyway.  This behavior is the same in all versions from 
2.3 to 3.2, in fact, the 100 lines of code in sysmodule.c responsible for 
Python tracing functions are completely unchanged through those versions.

--
components: Library (Lib)
messages: 135089
nosy: nedbat
priority: normal
severity: normal
status: open
title: sys.settrace doesn't disable tracing if a local trace function returns 
None
type: behavior
versions: Python 2.7, Python 3.2

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11992
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11992] sys.settrace doesn't disable tracing if a local trace function returns None

2011-05-03 Thread Ned Batchelder

Changes by Ned Batchelder ned...@users.sourceforge.net:


--
assignee:  - nedbat

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11992
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com