?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Exception Handing - morfizm


Mar. 17th, 2011 02:54 pm Exception Handing

This time how Python works according to my intuition.
Trivial exercise: what does following code print?

try:
    try:
        raise Exception("Hello from second try!")
    finally:
        try:
            print "Finally"
            raise Exception("Hello from finally!")
        except:
            pass
    print "We're clean"
except Exception as e:
    print e.message

2 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:raindog_2
Date:March 18th, 2011 09:35 pm (UTC)
(Link)
Мне кажется, должно получиться

Finally
Hello from second try!

Прежде чем попасть во внешний except-блок, сработает finally-блок, в нем будет еще один Exception("Hello from finally!"), который будет съеден блоком except: pass.

Нет? Тогда, в чем подвох?
From:morfizm
Date:March 18th, 2011 09:47 pm (UTC)
(Link)
Здесь нет подвоха, я без всякой иронии сказал, что это trivial exercise.

На самом деле это как интуитивная, так и правильная реализация exception'ов: exception'ы stack'аются, и except-блоки "съедают" только внутренние exception'ы, предыдущие продолжают гулять в поисках своего catch-блока.

Я не могу припомнить, где, но, мне кажется, я раньше видел намного более слабые реализации exception'ов, в которых первый был бы съеден вторым блоком.