Redirecting stdout failure with help function inside `__repr__`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez par reproduire l’exemple avec contextlib.redirect_stdout, StringIO, help(), un repr imbriqué et des affectations de doc sur des instances dans les versions de CPython signalées. Suivez la façon dont help() formate l’objet et écrit la sortie lors des premier et deuxième appels. C’est terminé lorsque la reproduction ne laisse plus s’échapper la sortie de help() et ne lève plus IndexError avec stdout redirigé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug report
Despite modifying sys.stdout, the help function appears to ignore it sometimes during nested usage within __repr__ and with instance __doc__ attributes.
Example:
from contextlib import redirect_stdout
from io import StringIO
class ReprDoc:
"""Class doc-string."""
def __init__(self, value):
self.__doc__ = value.__doc__
self.value = value
def __repr__(self):
print("<===Starting Stdout Redirect===>")
with redirect_stdout(StringIO()) as doc:
help(self.value)
print("<===Stopping Stdout Redirect===>")
return doc.getvalue().splitlines()[2]
def foo():
"""Foo doc-string."""
help(ReprDoc(foo))
help(ReprDoc(foo))
Output:
<===Starting Stdout Redirect===>
<===Stopping Stdout Redirect===>
Help on ReprDoc in module __main__:
foo()
Foo doc-string.
<===Starting Stdout Redirect===>
Help on function foo in module __main__:
foo()
Foo doc-string.
<===Stopping Stdout Redirect===>
Traceback (most recent call last):
...
IndexError: list index out of range
Checking sys.stdout affirms it is correct at every step, and using print with the redirected stdout affirms that the problem comes from help itself.
I imagine this problem is related to the use of self.__doc__ assignments, though the behavior is very strange because it works the first time and then fails the second time.
Your environment
- CPython versions tested on:
>= 3.8 - Operating system and architecture: Windows 11
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Merge moyen
- 1 j 9 h
- PR mergées (30 j)
- 558
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/cpython
-
docs pending
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
stdlib type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
stdlib type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
build type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
stdlib topic-email type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Toutes les issues de python/cpython
Issues similaires
-
fix: inaccuracy ⚠️
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
uabrc/uabrc.github.io#1255 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
ethereum-optimism/factory#64 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
duckdb/duckdb-python#627 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Add link for tutorial Ouvertedocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
Qiskit/qiskit-addon-sqd#376 ·