symtable: repr() of a Symbol raises TypeError under -X lazy_imports=all
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
Piste de recherche
Lisez Lib/symtable.py, en particulier l’endroit où _flags et _scopes_value_to_name sont construits à partir de globals(), puis comparez ces noms aux constantes de _symtable. Commencez par exécuter l’exemple repr() signalé avec -X lazy_imports=all ; exécutez ensuite test_symtable avec et sans les imports différés. Le travail est terminé lorsque les symboles affichent leurs flags et noms de portée attendus dans les deux modes, et que le test n’a plus besoin d’être exclu de Lib/test/lazy_imports_all_exclude.txt.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug report
Bug description:
With -X lazy_imports=all, repr() of a symtable.Symbol raises TypeError:
import symtable
top = symtable.symtable('x = 1', '<string>', 'exec')
print(top.get_symbols())
$ ./python -X lazy_imports=all repro.py
Traceback (most recent call last):
File "repro.py", line 3, in <module>
print(top.get_symbols())
~~~~~^^^^^^^^^^^^^^^^^^^
File "Lib/symtable.py", line 264, in __repr__
flags_str = '|'.join(self._flags_str())
File "Lib/symtable.py", line 272, in _flags_str
if self.__flags & flagvalue == flagvalue:
~~~~~~~~~~~~~^~~~~~~~~~~
TypeError: unsupported operand type(s) for &: 'int' and 'lazy_import'
Without the option it prints [<symbol 'x': LOCAL, DEF_LOCAL>].
Lib/symtable.py builds its _flags and _scopes_value_to_name tables from globals(): https://github.com/python/cpython/blob/c79146a9eb05dea735a6a22dc004379cdec3ed0e/Lib/symtable.py#L388-L391
With lazy_imports=all, the from _symtable import ... at the top of the module is lazy, so globals() holds lazy_import objects instead of the integer constants. _flags breaks repr() as above, and once that is fixed, _scopes_value_to_name still makes the scope print as 1 instead of LOCAL.
This is the test_symtable failure mentioned in gh-149640, and why test_symtable is in Lib/test/lazy_imports_all_exclude.txt. The 3.15 branch has the same code.
Possible fix: take the values from the _symtable module (for example getattr(_symtable, name)) instead of from globals(). With that, test_symtable passes with and without -X lazy_imports=all and can come off the exclusion list. I can open a PR if this sounds right.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-160866
- Langage dominant
- Python
- Étoiles
- 77.8k
- Forks
- 37.7k
- Merge moyen
- 12 h 14 min
- PR mergées (30 j)
- 729
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire 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
-
tests topic-profiling type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
python/cpython#160881 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
3.16 build pending type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
python/cpython#160829 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
dependencies infra topic-ensurepip
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 1 jour
-
tarfile: extractfile(member).read() of a sparse member is slow due to repeated bytes concatenationPeut-être pris @devdavidejesus l’a pris aujourd’hui. Ouverteperformance stdlib triaged type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
python/cpython#160774 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
tests topic-profiling type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
python/cpython#160334 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de python/cpython
Issues similaires
-
Support .aac audio uploadsPeut-être pris @julien731 l’a pris aujourd’hui. Ouvertefeature
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
nimblehq/audio-transcriber#153 ·
-
help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
antonyrag/ragleap-core#1062 ·
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
gke-labs/kube-agents#4321 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Git-Hospital/githealthcheck#61 ·
Les mainteneurs répondent en général sous 1 jour
-
changelog investigate
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
ramnes/notion-sdk-py#433 ·