Why no try-except-finally ? (errors fixed)

KefX keflimarcusx at aol.comNOSPAM
Wed Nov 5 04:12:59 EST 2003


>This may have been discussed before, but I'm kind of confused as to why
>Python
>doesn't support having both an except ~and~ a finally clause, like this:
>
>try:
>    raise RuntimeException
>except:
>    print "What is the answer?"
>finally:
>    print 42
>
>This doesn't work because I use both 'except' and 'finally'. I'm not saying
>that it SHOULD work, I'm wondering why it doesn't. I thought about it for a
>second, though, and came up with the ad-hoc "nested-try idiom", as I call it:
>
>try:
>    try:
>        raise RuntimeException
>    except:
>        print "What is the answer?"
>finally:
>    print 42
>
>This works as expected: the exception gets thrown, the question gets asked in
>the 'except' clause, and then the question gets answered in the 'finally'
>clause. Of course in real-world code we wouldn't be asking questions and
>giving
>answers via exception-handling, but the path of execution is what counts. Is
>this idiom unPythonic somehow? (The nested-try thing does look odd...) Or is
>it
>the way we're supposed to do it? Or is there something I'm missing?
>
>- Kef

I messed up a couple things in my post, heh. First off, of course
RuntimeException should be RuntimeError. The other is that this (the nested try
idiom):

>try:
>    try:
>        raise RuntimeException
>    except:
>        print "What is the answer?"
>finally:
>    print 42

should instead be this:

try:
    try:
        raise RuntimeError
    except:
        print "What is the answer?"
        raise # <- HAD BEEN FORGOTTEN
finally:
    print 42

- Kef




More information about the Python-list mailing list