diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-07-10 21:03:37 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-07-10 21:03:37 +0200 |
commit | e432bd2dcffa61cfa55b00fb76009eae0f577120 (patch) | |
tree | 95c1fcf38138554e0f1bbcced9762388bfcfc05a | |
parent | eb41df3ffa40d84e4097382d874065889fdc7fac (diff) | |
download | astroid-git-catch-attribute-inference-error-in-safe-infer.tar.gz |
[safe_infer] Catch astroid.AttributeInferenceError in safe_infercatch-attribute-inference-error-in-safe-infer
Safe infer was not really safe, see https://github.com/PyCQA/pylint/issues/4692
-rw-r--r-- | astroid/helpers.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/astroid/helpers.py b/astroid/helpers.py index 7a573612..b4c09000 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 @@ from astroid.exceptions import ( _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) |