Exceptions thrown during yield operation fall through the generator instead of being handled within
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
The following code:
<?php
set_error_handler(function() { throw new \Error(); });
function &gen() {
try {
yield 1;
} catch (Error $e) {
print "Caught";
}
}
foreach (gen() as $y);
Resulted in Uncaught Error
But I expected this output instead:
Caught
return_by_ref has the same problem, it seems to me, however in generators there's the additional case of exceptions in destructors of previous key and values.
I wouldn't change the longstanding behaviour in current PHP versions, but should be fixed for PHP 8.2 possibly, for academical correctness at least.
PHP Version
master
Operating System
No response
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
Reproduire l’exemple de generator fourni sur PHP master et comparer le flux d’erreur observé avec le comportement attendu de catch. Examiner ensuite la gestion de yield dans les generators, le comportement du retour par référence et les cas de destructor mentionnés. La tâche est terminée lorsque la gestion des exceptions prévue est définie et couverte pour les scénarios signalés, sans modifier involontairement le comportement établi.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- php
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100