From e432bd2dcffa61cfa55b00fb76009eae0f577120 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Sat, 10 Jul 2021 21:03:37 +0200 Subject: [PATCH] [safe_infer] Catch astroid.AttributeInferenceError in safe_infer Safe infer was not really safe, see https://github.com/PyCQA/pylint/issues/4692 --- astroid/helpers.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/astroid/helpers.py b/astroid/helpers.py index 7a573612e..b4c09000f 100644 --- a/astroid/helpers.py +++ b/astroid/helpers.py @@ -15,7 +15,7 @@ """ Various helper utilities. """ - +from typing import TYPE_CHECKING, Optional from astroid import bases from astroid import context as contextmod @@ -29,6 +29,9 @@ _NonDeducibleTypeHierarchy, ) +if TYPE_CHECKING: + from astroid.nodes import NodeNG + def _build_proxy_class(cls_name, builtins): proxy = raw_building.build_class(cls_name) @@ -147,7 +150,7 @@ def object_issubclass(node, class_or_seq, context=None): return _object_type_is_subclass(node, class_or_seq, context=context) -def safe_infer(node, context=None): +def safe_infer(node: "NodeNG", context=None) -> Optional["NodeNG"]: """Return the inferred value for the given node. Return None if inference failed or if there is some ambiguity (more than @@ -156,7 +159,7 @@ def safe_infer(node, context=None): try: inferit = node.infer(context=context) value = next(inferit) - except (InferenceError, StopIteration): + except (InferenceError, StopIteration, AttributeInferenceError): return None try: next(inferit)