fix python function arg-count mismatch frustration#361
Merged
Conversation
…too many or too few arguments
…oo few or too many arguments
philippedistributive
previously approved these changes
Jun 10, 2024
philippedistributive
approved these changes
Jun 14, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes #265, by allowing JS code to call python functions even when supplied too many or too few arguments.
When too many arguments are supplied, those beyond the function's argument count are ignored, e.g.:
When too few arguments are supplied, those beyond the number of supplied arguments are passed as
Noneto match JavaScript's behaviour of passingundefined, e.g.:This also works for functions with default arguments, or varargs, e.g.:
This PR potentially has the downside that I outlined here, where programmers primarily familiar with python rather than JS might expect a python function supplied with too many or too few arguments to raise a
TypeError: f() missing X required positional argumentsorTypeError: f() takes X positional arguments but Y were givenexception like usual, rather than silently adding or removing arguments to the function call.To keep this relationship symmetrical, we may wish to make it so we raise an exception when a JS function is called with too many or too few arguments from python, despite that not normally being the case in JS.