Sigh. I attempted to reduce this to a minimal example to focus the discussion on the question of list comprehension variable scope. Instead I seem to have gotten people off on other tangents. I suppose I should post more of the real code...
song_ids = request.POST.getlist('song_id') try: songs = [Song.get(int(id)) for id in song_ids] except Song.DoesNotExist: return HttpResponseBadRequest("unknown song id (%d)" % id) I may be in the minority here, but it doesn't bother me much that my use of 'id' shadows a built-in. Especially in small scopes like this, I use whatever variable names make the the code easiest to read and don't worry about shadowing builtins. I don't have an exhaustive list of builtins in my head, so even if I worried about common ones like file or id, I'm sure I'd miss some others. So I don't sweat it. If shadowing builtins was really evil, they'd be reserved keywords and then you wouldn't be able to do it. -- http://mail.python.org/mailman/listinfo/python-list