Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #16679

Re: Scope of variable inside list comprehensions?

Date 2011-12-05 19:57 +0100
From Jean-Michel Pichavant <jeanmichel@sequans.com>
Subject Re: Scope of variable inside list comprehensions?
References <25531460.861.1323104692320.JavaMail.geo-discussion-forums@yqiv14>
Newsgroups comp.lang.python
Message-ID <mailman.3315.1323111443.27778.python-list@python.org> (permalink)

Show all headers | View raw


Roy Smith wrote:
> Consider the following django snippet.  Song(id) raises DoesNotExist if the id is unknown.
>
>     try:
>         songs = [Song(id) for id in song_ids]
>     except Song.DoesNotExist:
>         print "unknown song id (%d)" % id
>
> Is id guaranteed to be in scope in the print statement?  I found one thread (http://mail.python.org/pipermail/python-bugs-list/2006-April/033235.html) which says yes, but hints that it might not always be in the future.  Now that we're in the future, is that still true?  And for Python 3 also?
>
> The current docs, http://docs.python.org/tutorial/datastructures.html#list-comprehensions, are mute on this point.
>   
For python 2, id will always be defined *as you meant it*. But you're 
doing something wrong : overiding the 'id' builtin function.
With python 3 you will probably print the 'id' builtin function 
representation, which is correct but not want you want to achieve.

The proper way to propagate information with exceptions is using the 
exception itself:

try:
    songs = [Song(_id) for _id in song_ids]
except Song.DoesNotExist, exc:
    print exc

class DoesNotExist(Exception):
    def __init__(self, songId):
        self.songId = songId
    def __str__(self):
        return "Unkown Song Id %s" % self.songId

class Song:
    def __init__(self, songId):
	if whatever:
             raise DoesNotExist(songId)
        self.id=songId

JM

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 09:04 -0800
  Re: Scope of variable inside list comprehensions? Jussi Piitulainen <jpiitula@ling.helsinki.fi> - 2011-12-05 20:04 +0200
  Re: Scope of variable inside list comprehensions? Peter Otten <__peter__@web.de> - 2011-12-05 19:10 +0100
  Re: Scope of variable inside list comprehensions? Jean-Michel Pichavant <jeanmichel@sequans.com> - 2011-12-05 19:57 +0100
    Re: Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 11:15 -0800
    Re: Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 11:15 -0800
      Re: Scope of variable inside list comprehensions? Terry Reedy <tjreedy@udel.edu> - 2011-12-05 15:22 -0500
        Re: Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 14:36 -0800
        Re: Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 14:36 -0800
          Re: Scope of variable inside list comprehensions? Terry Reedy <tjreedy@udel.edu> - 2011-12-05 21:23 -0500
    Re: Scope of variable inside list comprehensions? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-12-05 22:35 +0000
      Re: Scope of variable inside list comprehensions? Roy Smith <roy@panix.com> - 2011-12-05 14:57 -0800
        Re: Scope of variable inside list comprehensions? Chris Angelico <rosuav@gmail.com> - 2011-12-06 13:35 +1100
      Re: Scope of variable inside list comprehensions? Jean-Michel Pichavant <jeanmichel@sequans.com> - 2011-12-06 11:38 +0100
  Re: Scope of variable inside list comprehensions? Rainer Grimm <r.grimm@science-computing.de> - 2011-12-05 22:42 -0800
    Re: Scope of variable inside list comprehensions? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-06 02:16 -0800

csiph-web