Python implementation of traceback limit does not default to 1000 as documented in 3.13
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Bug report
Bug description:
According to the documentation of sys.tracebacklimit, it should default to 1000 if not set, so the following snippet:
import sys
def f():
f()
sys.setrecursionlimit(2000)
f()
produces a traceback of 1000 frames as expected in 3.12:
Traceback (most recent call last):
File "t.py", line 4, in f
f()
~^^
File "t.py", line 4, in f
f()
~^^
File "t.py", line 4, in f
f()
~^^
[Previous line repeated 997 more times]
RecursionError: maximum recursion depth exceeded
But in 3.13 and the current master, it produces a traceback of all 2000 frames:
Traceback (most recent call last):
File "t.py", line 4, in f
f()
~^^
File "t.py", line 4, in f
f()
~^^
File "t.py", line 4, in f
f()
~^^
File "t.py", line 4, in f
f()
~^^
[Previous line repeated 1996 more times]
RecursionError: maximum recursion depth exceeded
This is because with issue #110721, traceback is now printed with the traceback module by default, and the traceback module defaults sys.tracebacklimit to None when not set:
https://github.com/python/cpython/blob/c3ed775899eedd47d37f8f1840345b108920e400/Lib/traceback.py#L458
whereas the C implementation of the traceback printer has a proper default of 1000 for sys.tracebacklimit as documented:
https://github.com/python/cpython/blob/c3ed775899eedd47d37f8f1840345b108920e400/Python/traceback.c#L707
I will submit a PR to make 1000 the default value for sys.tracebacklimit in the Python implementation of the traceback module.
CPython versions tested on:
3.13, CPython main branch
Operating systems tested on:
Linux, Windows
Linked PRs
- gh-125719
- gh-125777
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in Lib/traceback.py at the default handling for sys.tracebacklimit, and compare it with the C implementation in Python/traceback.c. Verify the documented default of 1000 using the recursive example from the issue, ensuring Python's traceback printer limits the output consistently with the C implementation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 20/100