Repository navigation
Deprecate gen.throw(typ, val, tb) #96348
Description
Activity
- addedtype-featureA feature request or enhancementA feature request or enhancement
on 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.- changed the title
[-]Deprecate `gen.throw(typ, val, exc)`[/-][+]Deprecate `gen.throw(typ, val, tb)`[/+]on Aug 28, 2022 Yes, this would be good. The triplet is not just wasteful, it's also ambiguous when
val.__traceback__ != tb.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.)
Reacted by Irit Katriel and Raymond Hettinger- addedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)3.12only security fixesonly security fixes
on Aug 28, 2022 Marked as easy, but also as release-blocker for 3.12 so we won't forget.
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.Lines 413 to 416 in af368a7
static PyObject * anextawaitable_throw(anextawaitableobject *obj, PyObject *arg) { return anextawaitable_proxy(obj, "throw", arg); } 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.12 remaining items
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.- 3 file is under
Lib - 1 is in
Lib/lib2to3/fixes - The rest are tests.
- 51 results in 12 files.txt
- 3 file is under
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.
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.
This is why I suggested the change in #96348 (comment), because that actually causes most (if not all) of the test failures.
You're right.
- added a commit that references this issue
on Sep 30, 2022 Should we close this since the PR is merged?
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?
...or is this similar to #105269 and the single-argument form was actually added earlier, but not documented?
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
CC: @iritkatriel
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 togen_throw()when more than one argument is present.Thoughts?