diff --git a/jedi/evaluate/dynamic.py b/jedi/evaluate/dynamic.py index f22eb32d..49dbea1c 100644 --- a/jedi/evaluate/dynamic.py +++ b/jedi/evaluate/dynamic.py @@ -95,7 +95,7 @@ def search_params(evaluator, param): continue scopes = [scope] if first: - scopes = evaluator.eval_call_path(iter(first), scope, pos) + scopes = evaluator.eval_call_path(iter(first), c.parent, pos) pos = None from jedi.evaluate import representation as er for scope in scopes: diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index a9c2ae0e..39717f3c 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -50,8 +50,12 @@ class NameFinder(object): and isinstance(self.name_str.parent.parent, pr.Param)): if not isinstance(self.name_str, (str, unicode)): # TODO Remove? err_type = 'name-error' if search_global else 'attribute-error' - message = ('AttributeError: %s has no attribute %s' - % (self._last_filter_name_scope, self.name_str)) + if err_type == 'name-error': + message = ("NameError: name '%s' is not defined." + % self.name_str) + else: + message = ('AttributeError: %s has no attribute %s.' + % (self._last_filter_name_scope, self.name_str)) analysis.add(self._evaluator, err_type, self.name_str, message, payload=(self.scope, self.name_str)) diff --git a/test/static_analysis/attribute_error.py b/test/static_analysis/attribute_error.py index e05879b5..c4bd7330 100644 --- a/test/static_analysis/attribute_error.py +++ b/test/static_analysis/attribute_error.py @@ -76,6 +76,12 @@ return_one(''.undefined_attribute) [r for r in [1, 2]] +# some random error throw +class NotCalled(): + def match_something(self, param): + seems_to_need_an_assignment = param + return [value.match_something() for value in []] + # ----------------- # decorators # -----------------