summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--astroid/brain/brain_builtin_inference.py38
-rw-r--r--astroid/brain/brain_namedtuple_enum.py18
-rw-r--r--astroid/brain/brain_random.py4
-rw-r--r--astroid/brain/brain_six.py4
-rw-r--r--astroid/decorators.py4
-rw-r--r--astroid/protocols.py4
-rw-r--r--astroid/scoped_nodes.py2
8 files changed, 39 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index cb92a70d..7972d69e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -23,6 +23,8 @@ Release Date: TBA
Close PyCQA/pylint#3583
+* Fixed exception-chaining error messages.
+
What's New in astroid 2.4.3?
============================
diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py
index 4b07ac5c..f3b4c155 100644
--- a/astroid/brain/brain_builtin_inference.py
+++ b/astroid/brain/brain_builtin_inference.py
@@ -165,13 +165,13 @@ def _container_generic_inference(node, context, node_type, transform):
if not transformed:
try:
inferred = next(arg.infer(context=context))
- except (InferenceError, StopIteration):
- raise UseInferenceDefault()
+ except (InferenceError, StopIteration) as exc:
+ raise UseInferenceDefault from exc
if inferred is util.Uninferable:
- raise UseInferenceDefault()
+ raise UseInferenceDefault
transformed = transform(inferred)
if not transformed or transformed is util.Uninferable:
- raise UseInferenceDefault()
+ raise UseInferenceDefault
return transformed
@@ -267,8 +267,8 @@ def _get_elts(arg, context):
is_iterable = lambda n: isinstance(n, (nodes.List, nodes.Tuple, nodes.Set))
try:
inferred = next(arg.infer(context))
- except (InferenceError, NameInferenceError):
- raise UseInferenceDefault()
+ except (InferenceError, NameInferenceError) as exc:
+ raise UseInferenceDefault from exc
if isinstance(inferred, nodes.Dict):
items = inferred.items
elif is_iterable(inferred):
@@ -371,12 +371,12 @@ def infer_super(node, context=None):
else:
try:
mro_pointer = next(node.args[0].infer(context=context))
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
try:
mro_type = next(node.args[1].infer(context=context))
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
if mro_pointer is util.Uninferable or mro_type is util.Uninferable:
# No way we could understand this.
@@ -397,8 +397,8 @@ def _infer_getattr_args(node, context):
try:
obj = next(node.args[0].infer(context=context))
attr = next(node.args[1].infer(context=context))
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
if obj is util.Uninferable or attr is util.Uninferable:
# If one of the arguments is something we can't infer,
@@ -437,8 +437,8 @@ def infer_getattr(node, context=None):
# Try to infer the default and return it instead.
try:
return next(node.args[2].infer(context=context))
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
raise UseInferenceDefault
@@ -505,8 +505,8 @@ def infer_property(node, context=None):
getter = node.args[0]
try:
inferred = next(getter.infer(context=context))
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
if not isinstance(inferred, (nodes.FunctionDef, nodes.Lambda)):
raise UseInferenceDefault
@@ -673,12 +673,12 @@ def infer_isinstance(callnode, context=None):
class_container = _class_or_tuple_to_container(
class_or_tuple_node, context=context
)
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
try:
isinstance_bool = helpers.object_isinstance(obj_node, class_container, context)
except AstroidTypeError as exc:
- raise UseInferenceDefault("TypeError: " + str(exc))
+ raise UseInferenceDefault("TypeError: " + str(exc)) from exc
except MroError as exc:
raise UseInferenceDefault from exc
if isinstance_bool is util.Uninferable:
diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py
index 13fcf793..c0aa1c2b 100644
--- a/astroid/brain/brain_namedtuple_enum.py
+++ b/astroid/brain/brain_namedtuple_enum.py
@@ -51,8 +51,8 @@ def _infer_first(node, context):
raise UseInferenceDefault()
else:
return value
- except StopIteration:
- raise InferenceError()
+ except StopIteration as exc:
+ raise InferenceError from exc
def _find_func_form_arguments(node, context):
@@ -88,7 +88,7 @@ def infer_func_form(node, base_type, context=None, enum=False):
name, names = _find_func_form_arguments(node, context)
try:
attributes = names.value.replace(",", " ").split()
- except AttributeError:
+ except AttributeError as exc:
if not enum:
attributes = [
_infer_first(const, context).value for const in names.elts
@@ -117,11 +117,11 @@ def infer_func_form(node, base_type, context=None, enum=False):
_infer_first(const, context).value for const in names.elts
]
else:
- raise AttributeError
+ raise AttributeError from exc
if not attributes:
- raise AttributeError
- except (AttributeError, exceptions.InferenceError):
- raise UseInferenceDefault()
+ raise AttributeError from exc
+ except (AttributeError, exceptions.InferenceError) as exc:
+ raise UseInferenceDefault from exc
attributes = [attr for attr in attributes if " " not in attr]
@@ -405,8 +405,8 @@ def infer_typing_namedtuple(node, context=None):
# so we extract the args and infer a named tuple.
try:
func = next(node.func.infer())
- except InferenceError:
- raise UseInferenceDefault
+ except InferenceError as exc:
+ raise UseInferenceDefault from exc
if func.qname() != "typing.NamedTuple":
raise UseInferenceDefault
diff --git a/astroid/brain/brain_random.py b/astroid/brain/brain_random.py
index 5ec858a1..ee116474 100644
--- a/astroid/brain/brain_random.py
+++ b/astroid/brain/brain_random.py
@@ -47,8 +47,8 @@ def infer_random_sample(node, context=None):
try:
elts = random.sample(inferred_sequence.elts, length.value)
- except ValueError:
- raise astroid.UseInferenceDefault
+ except ValueError as exc:
+ raise astroid.UseInferenceDefault from exc
new_node = astroid.List(
lineno=node.lineno, col_offset=node.col_offset, parent=node.scope()
diff --git a/astroid/brain/brain_six.py b/astroid/brain/brain_six.py
index 46d9fa32..1519d585 100644
--- a/astroid/brain/brain_six.py
+++ b/astroid/brain/brain_six.py
@@ -145,8 +145,8 @@ def _six_fail_hook(modname):
attribute = modname[start_index:].lstrip(".").replace(".", "_")
try:
import_attr = module.getattr(attribute)[0]
- except AttributeInferenceError:
- raise AstroidBuildingError(modname=modname)
+ except AttributeInferenceError as exc:
+ raise AstroidBuildingError(modname=modname) from exc
if isinstance(import_attr, nodes.Import):
submodule = MANAGER.ast_from_module_name(import_attr.names[0][0])
return submodule
diff --git a/astroid/decorators.py b/astroid/decorators.py
index 0f3632c4..8db0868e 100644
--- a/astroid/decorators.py
+++ b/astroid/decorators.py
@@ -134,9 +134,9 @@ def raise_if_nothing_inferred(func, instance, args, kwargs):
# generator is empty
if error.args:
# pylint: disable=not-a-mapping
- raise exceptions.InferenceError(**error.args[0])
+ raise exceptions.InferenceError(**error.args[0]) from error
raise exceptions.InferenceError(
"StopIteration raised without any error information."
- )
+ ) from error
yield from generator
diff --git a/astroid/protocols.py b/astroid/protocols.py
index 2cdf5548..dc66ca2c 100644
--- a/astroid/protocols.py
+++ b/astroid/protocols.py
@@ -498,8 +498,8 @@ def _infer_context_manager(self, mgr, context):
elif isinstance(inferred, bases.Instance):
try:
enter = next(inferred.igetattr("__enter__", context=context))
- except (exceptions.InferenceError, exceptions.AttributeInferenceError):
- raise exceptions.InferenceError(node=inferred)
+ except (exceptions.InferenceError, exceptions.AttributeInferenceError) as exc:
+ raise exceptions.InferenceError(node=inferred) from exc
if not isinstance(enter, bases.BoundMethod):
raise exceptions.InferenceError(node=enter)
yield from enter.infer_call_result(self, context)
diff --git a/astroid/scoped_nodes.py b/astroid/scoped_nodes.py
index 8561e745..5c941966 100644
--- a/astroid/scoped_nodes.py
+++ b/astroid/scoped_nodes.py
@@ -2571,7 +2571,7 @@ class ClassDef(mixins.FilterStmtsMixin, LocalsDictNodeNG, node_classes.Statement
else:
raise exceptions.InferenceError(
error.message, target=self, attribute=name, context=context
- )
+ ) from error
def has_dynamic_getattr(self, context=None):
"""Check if the class has a custom __getattr__ or __getattribute__.