What's new with Gnosis

Discussion in 'Python' started by David Mertz, Jul 12, 2003.

  1. David Mertz

    David Mertz Guest

    At the suggestion of one of my correspondents, I slightly reluctantly
    implemented an RSS feed for my website/writing. It is perhaps a bit
    crude so far, but maybe I'll spiff it up. The RSS also has an HTML
    front to it.

    If you want to see the latest news about my _Charming Python_ or _XML
    Matters_ columns, or about other articles (later, perhaps stuff about
    my book), take a look at:

    http://gnosis.cx/rss.xml

    Or

    http://www.gnosis.cx/publish/whatsnew.html

    I'm new to this RSS stuff... so let me know (gently) if I've done
    anything terribly wrong.

    --
    mertz@ _/_/_/_/ THIS MESSAGE WAS BROUGHT TO YOU BY: \_\_\_\_ n o
    gnosis _/_/ Postmodern Enterprises \_\_
    ..cx _/_/ \_\_ d o
    _/_/_/ IN A WORLD W/O WALLS, THERE WOULD BE NO GATES \_\_\_ z e
    David Mertz, Jul 12, 2003
    #1
    1. Advertising

  2. David Mertz

    John J. Lee Guest

    "Raymond Hettinger" <> writes:
    [...]
    > ACT I ---------------------------------------
    > >>> s = list('abc')
    > >>> try:

    > ... result = s['a']
    > ... except IndexError, TypeError:
    > ... print 'Not found'
    > ...
    >
    > Traceback (most recent call last):
    > File "<pyshell#11>", line 2, in -toplevel-
    > result = s['a']
    > TypeError: list indices must be integers


    The second 'argument' of except is the caught exception object, so
    that code works as if you did

    try:
    result = s['a']
    except IndexError, e:
    TypeError = e
    print 'Not found'


    -- which doesn't catch the TypeError.



    > ACT II --------------------------------------------
    > >>> class MyMistake(Exception):

    > ... pass
    >
    > >>> try:

    > ... raise MyMistake, 'try, try again'
    > ... except MyMistake, msg:
    > ... print type(msg)
    > ...
    >
    > <type 'instance'>


    Again, the second 'argument' of except gets the exception object, not
    the string you used in the raise.

    These two are equivalent [XXX er, I *think* they're always equivalent]:

    raise SomeError, 'my error message'
    raise SomeError('my error message')

    The second form is more explicit, hence better.

    Exception objects do have a __str__ method, though, so you can print
    them as if they were strings:

    try:
    result = s['a']
    except IndexError, e:
    print e


    because print calls the e.__str__ method to do its work.


    > ACT III --------------------------------------------
    > >>> class Prohibited(Exception):

    > ... def __init__(self):
    > ... print 'This class of should never get initialized'
    > ...
    > >>> raise Prohibited()

    > This class of should never get initialized
    >
    > Traceback (most recent call last):
    > File "<pyshell#40>", line 1, in -toplevel-
    > raise Prohibited()
    > Prohibited: <unprintable instance object>
    > >>> raise Prohibited

    > This class of should never get initialized
    >
    > Traceback (most recent call last):
    > File "<pyshell#41>", line 1, in -toplevel-
    > raise Prohibited
    > Prohibited: <unprintable instance object>


    These are equivalent:

    raise Exception
    raise Exception()

    The second is more explicit, hence better.

    Since exception classes always end up getting instantiated whichever
    way you write the raise statement, you need to write __init__
    correctly if you override it. The Exception base class has an
    __init__ that it expects to be called, so you should call it:

    [At this point, I had to look up the arguments to Exception.__init__.]

    class Prohibited(Exception):
    def __init__(self, *args):
    Exception.__init__(self, *args)
    print 'This class will get initialized'


    In this case, the lack of that Exception.__init__ call is what's
    causing the "<unprintable instance object>" message, but it could
    cause other problems too.

    [Actually, with your interactive example, I don't get the
    "<unprintable..." bit -- maybe that's in 2.3b2...]



    > ACT IV -----------------------------------------------
    > >>> module = 'Root'
    > >>> try:

    > ... raise module + 'Error'
    > ... except 'LeafError':
    > ... print 'Need leaves'
    > ... except 'RootError':
    > ... print 'Need soil'
    > ... except:
    > ... print 'Not sure what is needed'
    > ...
    >
    > Not sure what is needed


    A raised string exception only matches the string in the except
    statment if both strings are the same object. It's not enough for
    them to have the same value. Two different string literals that have
    the same value aren't necessarily the same object:

    myerror = "myerror"
    anothererror = "myerror" # not *necessarily* the same object as myerror
    try:
    raise myerror
    except anothererror:
    # we only get here if it so happens that:
    assert myerror is anothererror
    except myerror:
    # we always get here, because:
    assert myerror is myerror



    > ACT V -----------------------------------------------
    > >>> try:

    > ... raise KeyError('Cannot find key')
    > ... except LookupError, msg:
    > ... print 'Lookup:', msg
    > ... except OverflowError, msg:
    > ... print 'Overflow:', msg
    > ... except KeyError, msg:
    > ... print 'Key:', msg
    >
    >
    > Lookup: 'Cannot find key'


    except statements are checked in the order you write them. Class
    instance exceptions are matched as if by

    isinstance(raised_exception, caught_exception)

    so exceptions can be caught by their base classes. LookupError is a
    base class of KeyError, so the first except matches.


    John
    John J. Lee, Jul 12, 2003
    #2
    1. Advertising

  3. David Mertz

    John J. Lee Guest

    Re: What's new with Gnosis [wrong thread ?]

    Bruno Desthuilliers <> writes:

    > John J. Lee wrote:
    > > "Raymond Hettinger" <> writes:
    > > [...]
    > >
    > >>ACT I ---------------------------------------
    > >>

    >
    >
    > (snip)
    >
    > John,
    > is it my newsreader going mad, or did you post in the wrong thread ?


    I posted in the wrong thread.

    Something about Gnus... haven't figured out why I occasionally do that yet.


    John
    John J. Lee, Jul 13, 2003
    #3
  4. Re: What's new with Gnosis [wrong thread ?]

    John J. Lee wrote:
    > "Raymond Hettinger" <> writes:
    > [...]
    >
    >>ACT I ---------------------------------------
    >>



    (snip)

    John,
    is it my newsreader going mad, or did you post in the wrong thread ?

    Bruno
    Bruno Desthuilliers, Jul 13, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. David Mertz, Ph.D.

    [Announce] Gnosis Utils 1.1.0 (update)

    David Mertz, Ph.D., Jul 16, 2003, in forum: Python
    Replies:
    0
    Views:
    311
    David Mertz, Ph.D.
    Jul 16, 2003
  2. Lulu of the Lotus-Eaters

    [Announce] Gnosis Utils 1.1.0 (update)

    Lulu of the Lotus-Eaters, Jul 16, 2003, in forum: Python
    Replies:
    0
    Views:
    290
    Lulu of the Lotus-Eaters
    Jul 16, 2003
  3. David Mertz, Ph.D.

    [Announce] Gnosis Utils 1.1.1

    David Mertz, Ph.D., Feb 19, 2004, in forum: Python
    Replies:
    0
    Views:
    365
    David Mertz, Ph.D.
    Feb 19, 2004
  4. David Mertz, Ph.D.

    Article on updates to gnosis.xml.objectify

    David Mertz, Ph.D., Dec 4, 2004, in forum: Python
    Replies:
    0
    Views:
    278
    David Mertz, Ph.D.
    Dec 4, 2004
  5. Scott David Daniels

    Scott David Daniels, Jan 2, 2005, in forum: Python
    Replies:
    0
    Views:
    298
    Scott David Daniels
    Jan 2, 2005
Loading...

Share This Page