-
-
Notifications
You must be signed in to change notification settings - Fork 31.8k
gh-79932: raise exception if frame.clear() is called on a suspended frame #111792
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is already a perfectly general mechanism to turn selected warnings into exceptions, using the warnings module and/or the -W flag. Why do we need a specific flag argument here to accomplish the same thing?
I need to turn it into an exception in a particular call (always). -W wouldn't work for that. Maybe I can use the warnings module locally though? |
What’s the use case for this need? Testing? Or something else? |
The reported bug was about traceback.clear_frames, which is called from unittest and can cause the program to freeze. |
Another option is to expose the frame state to python, so that the caller can avoid calling clear on a suspended frame. |
Yeah, given that we have an API here to manipulate the frame, and a reason for not using that API when the frame is suspended, it makes sense to allow the caller to detect the frame is in that state. At least that feels better than having a custom flag to turn the warning into an error. But: I'm not sure this requires deprecation even. It's just a bug, right? |
That was my initial plan, but a couple of test failed. I can just change the tests. |
Most likely those tests were mindlessly testing that the code did what it did, rather than what it should do. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, now it makes sense to me.
Is it worth backporting? |
I think there are situations where you clear a suspended frame, it closes the generator, and there's no problem because you don't try to use it anymore. Backporting this could break that. |
Is that really a feature? Then we need to change what we did here? |
I wouldn't go as far as calling it a feature. It's possible that sometimes this bug is not causing an actual problem, and it will if we raise exceptions. |
Okay, that's fair. So in 3.13 it will raise, but in 3.12 it might work, or it might cause a deadlock like in the original report. And we recommend that the OP fix their code to stop doing this. |
Fixes #79932.
📚 Documentation preview 📚: https://cpython-previews--111792.org.readthedocs.build/