Python implementation of traceback limit does not default to 1000 as documented in 3.13
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece em Lib/traceback.py, no tratamento padrão de sys.tracebacklimit, e compare-o com a implementação em C em Python/traceback.c. Verifique o valor padrão documentado de 1000 usando o exemplo recursivo da issue, garantindo que o impressor de tracebacks do Python limite a saída de forma consistente com a implementação em C.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- backend
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 20/100