summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Frost <indigo@bitglue.com>2014-09-23 11:47:33 -0400
committerPhil Frost <indigo@bitglue.com>2014-09-23 11:47:33 -0400
commitfd9baa43dfa11f245ad86a697354e254920d6770 (patch)
treecb9481f98883bf2d60e9dab7b250bbdd02288c1e
parent1c9a81913bf29977489eb132e9f0103f6b07f62c (diff)
parent29a511790992de719a038dcf7b11eeec806912b6 (diff)
downloadpyflakes-fd9baa43dfa11f245ad86a697354e254920d6770.tar.gz
Merge pull request #7 from sigmavirus24/undefined-name
Fix Undefined Name Exception in Comprehensions and Generators
-rw-r--r--pyflakes/checker.py2
-rw-r--r--pyflakes/test/test_undefined_names.py38
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):
"""