Uh oh!
There was an error while loading. Please reload this page.
gh-108901: Deprecate inspect.getargvalues and inspect.formatargvalues, provide modern alternative - #112639
gh-108901: Deprecate inspect.getargvalues and inspect.formatargvalues, provide modern alternative#112639sobolevn wants to merge 6 commits into
inspect.getargvalues and inspect.formatargvalues, provide modern alternative#112639Conversation
vkhodygo
commented
Feb 21, 2024
Any progress? |
sobolevn
commented
Mar 9, 2024
@hugovk I've implemented your suggestion about porting to Python 3.13, please take a look. |
vstinner
left a comment
There was a problem hiding this comment.
Please start with a separated PR which adds Signature.from_frame(). Once it will be merge, you can simplify this PR to only deprecate methods.
| for name in arg_names[:pos_count]: | ||
| if frame.f_locals and name in frame.f_locals: | ||
| defaults.append(frame.f_locals[name]) |
There was a problem hiding this comment.
It seems like you can move if frame.f_locals: out of this loop and the one below.
(Copying and pasting my reply from elsewhere :) PEP 387 says two releases of deprecation is the minimum but also:
Does that apply here? If so, and if the replacement is added in 3.13, then the removals should be when 3.13 is EOL in October 2029, meaning removal in 3.18, not 3.15. |
| class TestSignatureFromFrame(unittest.TestCase): | ||
| def test_signature_from_frame(self): | ||
| def inner(a=1, /, b=2, *e, c: int = 3, d, **f) -> None: | ||
| global fr |
There was a problem hiding this comment.
Using a global sounds like a bad idea. You can use a "nonlocal" instead.
Sometimes, I use a mutable type instead, which is more or less the same:
ns = {}
def func():
ns['name'] = value
This PR is stale because it has been open for 30 days with no activity. |
vstinner
commented
Apr 30, 2026
@sobolevn: This change is now outdated since it refers to Python 3.13. Do you still plan to work on this PR? If not, I suggest closing it. |
Now
getargvaluesis deprecated (together withformatargvalues). People should useSignatureobject instead.inspect313backports newSignature.from_frameto 3.8-3.12: https://github.com/wemake-services/inspect313/blob/a310c03c440156062504b14a6325fbbe84687052/inspect313/__init__.py#L25-L48 and https://github.com/wemake-services/inspect313/blob/master/README.md#replace-inspectgetargvalues-with-inspectsignaturefrom_frameinspectmodule, deprecate old incorrect APIs #108901📚 Documentation preview 📚: https://cpython-previews--112639.org.readthedocs.build/