no sys.monitoring branches shown for `async for`
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
With the code from PR 122564, no branches are indicated for an async for. In the example below, both branches for the if also unexpectedly present (through co_locations) as "going out of scope":
import asyncio
async def g():
yield 1
yield 2
x = 0
async def fun():
global x
async for v in g(): # line 11
if v > 0:
x += v
x += 3
print(x)
asyncio.run(fun())
Results:
Disassembly of <code object fun at 0x103480870, file "/Users/juan/project/slipcover/ex11.py", line 8>:
8 0 RETURN_GENERATOR
2 POP_TOP
L1: 4 RESUME 0
11 6 LOAD_GLOBAL 1 (g + NULL)
16 CALL 0
24 GET_AITER
L2: 26 GET_ANEXT
28 LOAD_CONST 0 (None)
L3: 30 SEND 3 (to L6)
L4: 34 YIELD_VALUE 1
L5: 36 RESUME 3
38 JUMP_BACKWARD_NO_INTERRUPT 5 (to L3)
L6: 40 END_SEND
L7: 42 STORE_FAST 0 (v)
12 44 LOAD_FAST 0 (v)
46 LOAD_CONST 1 (0)
48 COMPARE_OP 148 (bool(>))
L8: 52 POP_JUMP_IF_TRUE 2 (to L9)
56 JUMP_BACKWARD 17 (to L2)
L9: 60 NOT_TAKEN
13 62 LOAD_GLOBAL 2 (x)
72 LOAD_FAST 0 (v)
74 BINARY_OP 13 (+=)
78 STORE_GLOBAL 1 (x)
80 JUMP_BACKWARD 29 (to L2)
11 L10: 84 CLEANUP_THROW
L11: 86 JUMP_BACKWARD_NO_INTERRUPT 24 (to L6)
L12: 88 END_ASYNC_FOR
14 90 LOAD_GLOBAL 2 (x)
100 LOAD_CONST 2 (3)
102 BINARY_OP 13 (+=)
106 STORE_GLOBAL 1 (x)
15 108 LOAD_GLOBAL 5 (print + NULL)
118 LOAD_GLOBAL 2 (x)
128 CALL 1
136 POP_TOP
138 RETURN_CONST 0 (None)
-- L13: 140 CALL_INTRINSIC_1 3 (INTRINSIC_STOPITERATION_ERROR)
142 RERAISE 1
ExceptionTable:
L1 to L2 -> L13 [0] lasti
L2 to L4 -> L12 [1]
L4 to L5 -> L10 [3]
L5 to L7 -> L12 [1]
L7 to L8 -> L13 [0] lasti
L9 to L10 -> L13 [0] lasti
L10 to L11 -> L12 [1]
L12 to L13 -> L13 [0] lasti
'fun' branches:
ex11.py 12:11-12:16 "v > 0" (fun@52) -> 12:11-12:16 "v > 0" (fun@58) [if/while -> out]
ex11.py 12:11-12:16 "v > 0" (fun@52) -> 12:11-12:16 "v > 0" (fun@60) [if/while -> out]
@markshannon @nedbat
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
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.
Piste de recherche
Commencez par reproduire l’exemple async-for fourni sur CPython main et comparez la sortie des branches avec le comportement introduit par PR 122564. Suivez les données de branche de sys.monitoring et les co_locations concernés ; c’est terminé lorsque les branches async-for sont signalées et que les branches if ne sont plus marquées comme sortant de leur portée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- testing-qa, tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100