diff options
author | Phil Frost <indigo@bitglue.com> | 2014-09-23 11:47:33 -0400 |
---|---|---|
committer | Phil Frost <indigo@bitglue.com> | 2014-09-23 11:47:33 -0400 |
commit | fd9baa43dfa11f245ad86a697354e254920d6770 (patch) | |
tree | cb9481f98883bf2d60e9dab7b250bbdd02288c1e | |
parent | 1c9a81913bf29977489eb132e9f0103f6b07f62c (diff) | |
parent | 29a511790992de719a038dcf7b11eeec806912b6 (diff) | |
download | pyflakes-fd9baa43dfa11f245ad86a697354e254920d6770.tar.gz |
Merge pull request #7 from sigmavirus24/undefined-name
Fix Undefined Name Exception in Comprehensions and Generators
-rw-r--r-- | pyflakes/checker.py | 2 | ||||
-rw-r--r-- | pyflakes/test/test_undefined_names.py | 38 |
2 files changed, 39 insertions, 1 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 7055832..6d99310 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -471,7 +471,7 @@ class Checker(object): return scopes = [scope for scope in self.scopeStack[:-1] - if isinstance(scope, (FunctionScope, ModuleScope))] + if isinstance(scope, (FunctionScope, ModuleScope, GeneratorScope))] if isinstance(self.scope, GeneratorScope) and scopes[-1] != self.scopeStack[-2]: scopes.append(self.scopeStack[-2]) diff --git a/pyflakes/test/test_undefined_names.py b/pyflakes/test/test_undefined_names.py index 29627b7..4b230cc 100644 --- a/pyflakes/test/test_undefined_names.py +++ b/pyflakes/test/test_undefined_names.py @@ -435,6 +435,44 @@ class Test(TestCase): (42 for i in range(i)) ''', m.UndefinedName) + @skipIf(version_info < (2, 7), 'Dictionary comprehensions do not exist') + def test_definedFromLambdaInDictionaryComprehension(self): + """ + Defined name referenced from a lambda function within a dict/set + comprehension. + """ + self.flakes(''' + {lambda: id(x) for x in range(10)} + ''') + + def test_definedFromLambdaInGenerator(self): + """ + Defined name referenced from a lambda function within a generator + expression. + """ + self.flakes(''' + any(lambda: id(x) for x in range(10)) + ''') + + @skipIf(version_info < (2, 7), 'Dictionary comprehensions do not exist') + def test_undefinedFromLambdaInDictionaryComprehension(self): + """ + Undefined name referenced from a lambda function within a dict/set + comprehension. + """ + self.flakes(''' + {lambda: id(y) for x in range(10)} + ''', m.UndefinedName) + + def test_undefinedFromLambdaInComprehension(self): + """ + Undefined name referenced from a lambda function within a generator + expression. + """ + self.flakes(''' + any(lambda: id(y) for x in range(10)) + ''', m.UndefinedName) + class NameTests(TestCase): """ |