cptnwillard wrote: > Hello all, > For some reason, the following does not work : > > > class C: > TYPES = [None] > DICT = {} > for Type in TYPES: > DICT.update((E,Type) for E in [1]) > >>>> NameError: global name 'Type' is not defined > > > What do you think? Is this a bug?
Here is a simpler example: >>> class A: ... a = 42 ... list(a for _ in "a") ... Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in A File "<stdin>", line 3, in <genexpr> NameError: global name 'a' is not defined The equivalent code using a list comprehension instead of the generator expression works without complaint: >>> class A: ... a = 42 ... [a for _ in "a"] ... >>> So it seems that Python gets puzzled by the extra scope introduced by the genexp, i. e. you are seeing an obscure variant of the following (expected) behaviour: >>> class B: ... a = 42 ... def f(): a ... f() ... Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in B File "<stdin>", line 3, in f NameError: global name 'a' is not defined I think you should file a bug report, though making the genexp recognizing the class scope probably isn't worth the effort. Peter -- http://mail.python.org/mailman/listinfo/python-list