diff --git a/doc/whatsnew/fragments/7453.bugfix b/doc/whatsnew/fragments/7453.bugfix new file mode 100644 index 0000000000..94b5240dd4 --- /dev/null +++ b/doc/whatsnew/fragments/7453.bugfix @@ -0,0 +1,3 @@ +Fixed a crash in the ``unhashable-member`` checker when using a ``lambda`` as a dict key. + +Closes #7453 diff --git a/pylint/checkers/utils.py b/pylint/checkers/utils.py index 1c66de6878..f0b0de75ca 100644 --- a/pylint/checkers/utils.py +++ b/pylint/checkers/utils.py @@ -1950,6 +1950,8 @@ def is_hashable(node: nodes.NodeNG) -> bool: for inferred in node.infer(): if inferred is astroid.Uninferable: return True + if not hasattr(inferred, "igetattr"): + return True hash_fn = next(inferred.igetattr("__hash__")) if hash_fn.parent is inferred: return True diff --git a/tests/functional/u/unhashable_member.py b/tests/functional/u/unhashable_member.py index 1225543756..a9100b9058 100644 --- a/tests/functional/u/unhashable_member.py +++ b/tests/functional/u/unhashable_member.py @@ -21,3 +21,4 @@ class Unhashable: {[1, 2, 3]} # [unhashable-member] {"tomato": "tomahto"} {dict: {}} +{lambda x: x: "tomato"} # pylint: disable=unnecessary-lambda