Adrian Dragulescu <adrian_d <at> eskimo.com> writes: > > > I just started to learn python (first posting to the list). > > I have a list of dates as strings that I want to convert to a > list of datetime objects. Here is my debugging session from inside a > method. > > (Pdb) formatIndex > '%Y-%m-%d' > (Pdb) [datetime.strptime(i, formatIndex) for i in self.index[0:3]] > *** NameError: global name 'formatIndex' is not defined > (Pdb) [datetime.strptime(i, '%Y-%m-%d') for i in self.index[0:3]] > [datetime.datetime(2007, 1, 3, 0, 0), datetime.datetime(2007, 1, 4, 0, 0), > datetime.datetime(2007, 1, 5, 0, 0)] > (Pdb) > > How come I get an error that formatIndex is not defined? I just show that > it has value '%Y-%m-%d', in the same method scope. Not sure why it says > "global name", as I am in a method.
List comprehensions are implemented as nested functions. To be able to use variables from the outer scope, the compiler has to "see" the list comp in the context of the whole function. Thus, when you generate one dynamically (through user input), the compiler doesn't correctly make a closure. -- http://mail.python.org/mailman/listinfo/python-list