Skip to content

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

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

dstansby
Copy link
Member

@dstansby dstansby commented May 2, 2025

This is an attempt to resurrect #28115, but make it more general so we can emit helpful error messages when keys aren't found.

@dstansby dstansby changed the title Include close matches when key not found Include close matches in error message when key not found May 2, 2025
@dstansby dstansby force-pushed the close-matches branch 2 times, most recently from e92707c to 3f98b36 Compare May 3, 2025 17:20
@dstansby dstansby marked this pull request as ready for review May 3, 2025 18:53
@@ -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
Copy link
Member

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.

@tacaswell
Copy link
Member

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 difflib and move on?

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!).

@dstansby dstansby marked this pull request as draft May 5, 2025 17:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants