You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Issue GH-89874 gets rid of exception triples where it makes sense. I don't know if it was considered, but another place where such triples are supported is the gen.throw(). It allows passing either an exception, or a (type, value, traceback) triple where the value and traceback are optional. I think it makes sense to keep allowing passing an exception type, but I don't see the use case for passing separate type and value. We could deprecate this easily by adding a warning to gen_throw() when more than one argument is present.
This would be a nice simplification. AFAICT, the three argument form is rarely used, so deprecating that variant won't be disruptive. Also, when the signature becomes METH_O, calls to gen.throw will get faster.
I wonder if this could be marked as an "easy" issue for someone with moderate C skills to tackle? All you have to do (for now) is issue a deprecation warning if the arg count is larger than 1. (And update some docs.)
I wonder if this could be marked as an "easy" issue for someone with moderate C skills to tackle? All you have to do (for now) is issue a deprecation warning if the arg count is larger than 1. (And update some docs.)
Does it locate in Objects/iterobject.c? I'm trying to become a core developer and willing to help.
And the (type, value, traceback) triple documentation:
help(a.throw)
Help on built-in function throw:
throw(...) method of builtins.generator instance
throw(typ[,val[,tb]]) -> raise exception in generator,
return next yielded value or raise StopIteration.
For generators at least, the single-argument form was only added in Python 3.9, at least according to the docs. It's not mentioned in the 3.8 docs, it only appears in the 3.9 docs.
3.8 is still in support for another whole year. So if I'm trying to fix something - like twisted - to not print deprecation warnings constantly on Python 3.12, I either have to break it for a still-supported version of Python, or use some kind of rather ugly conditional to figure out what to pass it, right?
Activity
rhettinger commentedon Aug 28, 2022
This would be a nice simplification. AFAICT, the three argument form is rarely used, so deprecating that variant won't be disruptive. Also, when the signature becomes
METH_O, calls togen.throwwill get faster.[-]Deprecate `gen.throw(typ, val, exc)`[/-][+]Deprecate `gen.throw(typ, val, tb)`[/+]iritkatriel commentedon Aug 28, 2022
Yes, this would be good. The triplet is not just wasteful, it's also ambiguous when
val.__traceback__ != tb.gvanrossum commentedon Aug 28, 2022
I wonder if this could be marked as an "easy" issue for someone with moderate C skills to tackle? All you have to do (for now) is issue a deprecation warning if the arg count is larger than 1. (And update some docs.)
iritkatriel commentedon Aug 28, 2022
Marked as easy, but also as release-blocker for 3.12 so we won't forget.
ofey404 commentedon Aug 29, 2022
Does it locate in
Objects/iterobject.c? I'm trying to become a core developer and willing to help.cpython/Objects/iterobject.c
Lines 413 to 416 in af368a7
And the (type, value, traceback) triple documentation:
12 remaining items
ofey404 commentedon Aug 31, 2022
The problem size is not so large. I'll try to submit a version fixing them.
With regex
throw\(.*,.*,.*\), there are 51 results in 12 files.LibLib/lib2to3/fixesiritkatriel commentedon Aug 31, 2022
Not all of them need to be ‘fixed’ though.
Some of the tests are testing the deprecated API and need to stay (with the deprecation warning suppressed).
lib2to3 maps the deprecated form to the single arg form. It should not change.
Also, I would run the tests and see what fails rather than rely on a regex search.
iritkatriel commentedon Aug 31, 2022
Note also that just emitting a deprecation warning doesn’t cause tests to fail (we don’t run the tests with warnings-as-errors in CI).
This is why I suggested the change in #96348 (comment), because that actually causes most (if not all) of the test failures.
ofey404 commentedon Aug 31, 2022
You're right.
gh-96348: Deprecate the 3-arg signature of coroutine.throw and genera…
ofey404 commentedon Sep 30, 2022
Should we close this since the PR is merged?
pythongh-96348: Deprecate the 3-arg signature of coroutine.throw and …
gvanrossum commentedon Oct 11, 2022
AdamWill commentedon Oct 28, 2023
Wasn't this deprecation rather aggressive?
For generators at least, the single-argument form was only added in Python 3.9, at least according to the docs. It's not mentioned in the 3.8 docs, it only appears in the 3.9 docs.
3.8 is still in support for another whole year. So if I'm trying to fix something - like twisted - to not print deprecation warnings constantly on Python 3.12, I either have to break it for a still-supported version of Python, or use some kind of rather ugly conditional to figure out what to pass it, right?
AdamWill commentedon Oct 28, 2023
...or is this similar to #105269 and the single-argument form was actually added earlier, but not documented?