Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Local trace function return value: bug or documentation issue #104232

Copy link
Copy link
Closed
@L3viathan

Description

@L3viathan
Issue body actions

Bug report

The documentation of sys.settrace claims:

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.

Returning None inside a local trace function should therefore disable tracing. However, it doesn't:

def global_tf(*_):
    return local_tf

def local_tf(f, e, _):
    print(e, f)
    return None

def some_function():
    1
    2

import sys
sys.settrace(global_tf)
some_function()

Running this code produces three events within some_function (one for each line and one return), even though every invocation of the local trace function returns None.

Your environment

  • CPython versions tested on: 3.11, 3.10, 3.9 (behaviour differs slightly: just one line event)
  • Operating system and architecture: macOS (3.11, 3.10, 3.9), Linux (3.11)

I see three possibilities:

  • This is a misunderstanding, there's something I missed.
  • This is a bug in the documentation. In that case, the docs should be changed to something like "The local trace function can return a reference to another function for further tracing in that scope, or None to continue tracing that scope." I could write the PR in that case.
  • The behaviour is a bug. In that case, I think this part of the code should be changed to set frame.f_trace to None in the else case: https://github.com/python/cpython/blob/main/Python/sysmodule.c#L997-L1002 (thanks to @godlygeek for pointing out the place this is checked in). I could try writing the PR in that case.

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.