This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Useless argument in call to PyErr_Format
Type: enhancement Stage: resolved
Components: Interpreter Core Versions: Python 3.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: SylvainDe, vstinner
Priority: normal Keywords:

Created on 2017-03-27 20:55 by SylvainDe, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 854 merged python-dev, 2017-03-27 21:03
Messages (7)
msg290645 - (view) Author: SylvainDe (SylvainDe) * Date: 2017-03-27 20:55
Very uninteresting issue I've found while looking at the code.

In Objects/call.c, in _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg...), we have


   no_keyword_error:
       PyErr_Format(PyExc_TypeError,
                    "%.200s() takes no keyword arguments",
                    method->ml_name, nargs);

The `nargs` seems pointless.

This issue is mosly opened to have a record number to open a commit but it raises a few questions:

 - would it make sense to try to use GCC/CLang's logic around __attribute__ to have this kind of things checked during compilation as much as possible ?

 - would it make sense to define very small functions wrapping some calls to `PyErr_Format` so that one can use function with a very clear signature at (almost) no cost? This would be specially relevant for error raised in multiple places with the same message (The trio PyMethodDef *method/PyExc_TypeError/"%.200s() takes no keyword arguments" is a good candidate for this). I'd be happy for work on this but I'm afraid this would correspond to something Raymond Hettinger asks new comers not to do : "Don't be a picture straightener" ( https://speakerdeck.com/pybay2016/raymond-hettinger-keynote-core-developer-world ).

I've filled the impacted version as 3.7 as there is no real impacted version from a user point of view.
msg290648 - (view) Author: SylvainDe (SylvainDe) * Date: 2017-03-27 20:57
I forgot to copy the link but here is a description of what I had in mind for the first idea.
msg290649 - (view) Author: SylvainDe (SylvainDe) * Date: 2017-03-27 20:58
http://julio.meroh.net/2011/06/validating-format-strings-in-custom-c.html
msg290654 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2017-03-27 21:16
This is not an Argument Clinic issue.
msg290657 - (view) Author: SylvainDe (SylvainDe) * Date: 2017-03-27 21:26
Seems to be introduced via 250e4b0063fab35770719b64d1e36209c4aa2596 in January this year.
msg290659 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-03-27 21:36
New changeset d67a103702cf57de90a62c90f7ae969c23d96218 by Victor Stinner (Sylvain) in branch 'master':
bpo-29924: Remove useless argument (#854)
https://github.com/python/cpython/commit/d67a103702cf57de90a62c90f7ae969c23d96218
msg290660 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-03-27 21:40
Thank you SylvainDe, I merged your fix!

About the GCC __attribute__ idea: I'm not sure, since Python uses some extra formatters (I don't recall which one). If you succeed to write something working, please open a new issue!

Since the initial bug is fixed, I close the issue now.
History
Date User Action Args
2022-04-11 14:58:44adminsetgithub: 74110
2017-03-27 21:40:03vstinnersetstatus: open -> closed
resolution: fixed
messages: + msg290660

stage: resolved
2017-03-27 21:36:10vstinnersetnosy: + vstinner
messages: + msg290659
2017-03-27 21:26:42SylvainDesetmessages: + msg290657
2017-03-27 21:16:13larrysetnosy: - larry
2017-03-27 21:16:00larrysetnosy: larry, SylvainDe
messages: + msg290654
components: + Interpreter Core, - Argument Clinic
2017-03-27 21:03:39python-devsetpull_requests: + pull_request755
2017-03-27 20:58:26SylvainDesetmessages: + msg290649
2017-03-27 20:57:54SylvainDesetmessages: + msg290648
2017-03-27 20:55:22SylvainDecreate