GeezerVison is showing github.com — Deprecate `gen.throw(typ, val, tb)` · Issue #96348 · python/cpython
Deprecate gen.throw(typ, val, tb) #96348DescriptionCC: @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 to gen_throw() when more than one argument is present.
Thoughts? Reacted by Yury Selivanov Activityrhettinger commented 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 to gen.throw will get faster. changed the title [-]Deprecate `gen.throw(typ, val, exc)`[/-] [+]Deprecate `gen.throw(typ, val, tb)`[/+] on Aug 28, 2022iritkatriel commented on Aug 28, 2022 Yes, this would be good. The triplet is not just wasteful, it's also ambiguous when val.__traceback__ != tb. gvanrossum commented on 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.) Reacted by Irit Katriel and Raymond Hettinger iritkatriel commented on Aug 28, 2022 Marked as easy, but also as release-blocker for 3.12 so we won't forget. ofey404 commented on Aug 29, 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.)
Does it locate in Objects/iterobject.c? I'm trying to become a core developer and willing to help.
|
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.
ofey404 commented on 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.
iritkatriel commented on 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 commented on 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 commented on Aug 31, 2022
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, 2022gh-96348: Deprecate the 3-arg signature of coroutine.throw and genera… ofey404 commented on Sep 30, 2022 Should we close this since the PR is merged? gvanrossum commented on Oct 11, 2022 Search other C files in the same directory for DeprecationWarning.
…AdamWill commented on 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 commented on Oct 28, 2023 ...or is this similar to #105269 and the single-argument form was actually added earlier, but not documented?
MetadataMetadataStatusShow more project fields
DevelopmentNo branches or pull requestsIssue actions
|