-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
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
Deprecate gen.throw(typ, val, tb)
#96348
Comments
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 |
gen.throw(typ, val, exc)
gen.throw(typ, val, tb)
Yes, this would be good. The triplet is not just wasteful, it's also ambiguous when |
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.) |
Marked as easy, but also as release-blocker for 3.12 so we won't forget. |
Does it locate in Lines 413 to 416 in af368a7
And the (type, value, traceback) triple documentation:
|
No, I'm looking at |
I got it, here is the Lines 1145 to 1150 in af368a7
Besides, there is another occurrence in Lines 1539 to 1540 in af368a7
And how to throw deprecation warning from cpython c code? I searched the web but didn't find much useful material. |
The keywords here are Lines 256 to 267 in 692e907
Lines 524 to 534 in 804f252
cpython/Modules/_asynciomodule.c Lines 1110 to 1126 in b2afe48
|
Besides, I wonder are there any unit test catching depreciated warning? I randomly delete one warning in cpython source code, but all test suite still passed. |
You might refer to a historical commit(beea26b) from vstinner, which uses with self.assertWarns(DeprecationWarning):
do_something() Also, you can check the git log of the deprecated module to see if the unit test was also committed :) |
This is the number of (Python) stack levels to skip when computing the file name and line number to appear in the message. I'd start setting it to 1 and see what warning message actually gets printed. Increase it until the filename is reasonable. |
While we are at it, the same should be done for async generators too. |
Would it be reasonable to fix the failing tests in the same PR? Or are there too many? They should all just switch to throwing the middle value of the triple (the exception instance). |
You'll get pretty far with the tests if you fix this one:
|
The problem size is not so large. I'll try to submit a version fixing them. With regex
|
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. |
You're right. |
Should we close this since the PR is merged? |
Search other C files in the same directory for DeprecationWarning.
…--
--Guido (mobile)
|
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? |
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?
The text was updated successfully, but these errors were encountered: