diff options
author | cpopa <devnull@localhost> | 2014-04-25 13:17:17 +0300 |
---|---|---|
committer | cpopa <devnull@localhost> | 2014-04-25 13:17:17 +0300 |
commit | a1bf229f85aa0285f8a963f46109a06520a60ea7 (patch) | |
tree | b1fcdefc4aec24892a0abe700422fc4c5337f3f9 | |
parent | 5a130703e1a1f23bc5f80294527299675de1293e (diff) | |
download | pylint-a1bf229f85aa0285f8a963f46109a06520a60ea7.tar.gz |
Fix a potential AttributeError when checking for `reversed` arguments.
-rw-r--r-- | checkers/base.py | 13 | ||||
-rw-r--r-- | test/input/func_bad_reversed_sequence.py | 3 |
2 files changed, 10 insertions, 6 deletions
diff --git a/checkers/base.py b/checkers/base.py index ac58177..8136d0f 100644 --- a/checkers/base.py +++ b/checkers/base.py @@ -785,11 +785,14 @@ functions, methods if argument is None: # nothing was infered # try to see if we have iter() - if (isinstance(node.args[0], astroid.CallFunc) and - node.args[0].func.name == 'iter'): - func = node.args[0].func.infer().next() - if is_builtin_object(func): - self.add_message('bad-reversed-sequence', node=node) + if isinstance(node.args[0], astroid.CallFunc): + try: + func = node.args[0].func.infer().next() + except InferenceError: + return + if (getattr(func, 'name', None) == 'iter' and + is_builtin_object(func)): + self.add_message('bad-reversed-sequence', node=node) return if isinstance(argument, astroid.Instance): diff --git a/test/input/func_bad_reversed_sequence.py b/test/input/func_bad_reversed_sequence.py index a394e53..ad699e6 100644 --- a/test/input/func_bad_reversed_sequence.py +++ b/test/input/func_bad_reversed_sequence.py @@ -37,7 +37,7 @@ def uninferable(seq): """ return reversed(seq) -def test(): +def test(path): """ test function """ seq = reversed() seq = reversed(None) @@ -56,4 +56,5 @@ def test(): seq = reversed(deque([])) seq = reversed("123") seq = uninferable([1, 2, 3]) + seq = reversed(path.split("/")) return seq |