-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Include close matches in error message when key not found #30001
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
base: main
Are you sure you want to change the base?
Conversation
e92707c
to
3f98b36
Compare
@@ -174,12 +175,21 @@ def check_shape(shape, /, **kwargs): | |||
) | |||
|
|||
|
|||
def check_getitem(mapping, /, **kwargs): | |||
def check_getitem( | |||
mapping, /, _suggest_close_matches=False, _error_cls=ValueError, **kwargs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it make sense the make this depend on the number of elements by default? Suggest if there are more than N keys, otherwise list all. (Choose N somewhere between 5 and 10).
Maybe even don't make this configurable (YAGNI). I feel the automatic decision depending on the number of elements may be all we ever need and we don't need to bother with deciding on the option per call site.
We could always change later because this is private.
Where the discussion in #28115 got stalled is over using difflib or vendoring a copy of Levenstien distance with a question of how different the results are (and then I did not have time to answer that question). Do we want to resume that discussion or just use I think either way getting close matches is better than the current state of things and contra my previous comments I'm in favor of using difflib and changing the algorithm later if it is a problem (I'm not going to consider the guessed "did you mean..." list to be something we need to maintain API stability on!). |
This is an attempt to resurrect #28115, but make it more general so we can emit helpful error messages when keys aren't found.