| Store | Cart

[Python-Dev] (try-except) conditional expression similar to (if-else) conditional (PEP 308)

From: Alexander Kozlovsky <alex...@gmail.com>
Sat, 15 Aug 2009 02:41:30 +0400
Jeff McAninch wrote:
> I very often want something like a try-except conditional expression similar> to the if-else conditional. 

I think it may be done currently with the help of next function:

    def guard(func, *args):
        try:
            return func()
        except Exception, e:
            for exc_type, exc_func in args:
                if isinstance(e, exc_type):
                    return exc_func()
                raise

Example usage:

    a, b, c = 10, 20, 0

    result = a + b/c  # raise ZeroDivisionError

    result = a + guard(lambda: b/c, (TypeError, lambda: 10),
                                    (ZeroDivisionError, lambda: b/2))
    
May be not very concise, but it works...

                                    
-- 
Best regards,
 Alexander                  mailto:alexander.kozlovsky at gmail.com

Recent Messages in this Thread
Jeff McAninch Aug 05, 2009 10:22 pm
Raymond Hettinger Aug 06, 2009 12:59 am
P.J. Eby Aug 06, 2009 01:20 am
Nick Coghlan Aug 06, 2009 10:47 am
Dj Gilcrease Aug 06, 2009 11:18 am
MRAB Aug 06, 2009 11:39 am
Jeff McAninch Aug 06, 2009 02:36 pm
Dino Viehland Aug 06, 2009 09:55 pm
MRAB Aug 06, 2009 11:33 pm
Dino Viehland Aug 07, 2009 12:01 am
MRAB Aug 07, 2009 12:22 am
Jeff McAninch Aug 07, 2009 10:14 am
MRAB Aug 07, 2009 11:03 am
Dj Gilcrease Aug 10, 2009 02:29 pm
Jeff McAninch Aug 06, 2009 02:11 am
Antoine Pitrou Aug 06, 2009 11:32 am
Xavier Morel Aug 06, 2009 10:25 am
Russell E. Owen Aug 06, 2009 07:55 pm
MRAB Aug 07, 2009 12:36 am
Kristján Valur Jónsson Aug 07, 2009 10:22 am
ilya Aug 07, 2009 11:06 am
Michael Foord Aug 07, 2009 11:22 am
Alex Martelli Aug 07, 2009 02:55 pm
Steven DAprano Aug 08, 2009 06:02 am
Xavier Morel Aug 08, 2009 08:17 am
Stephen J. Turnbull Aug 08, 2009 01:19 pm
Alexander Kozlovsky Aug 14, 2009 10:41 pm
Steven DAprano Aug 10, 2009 11:45 pm
Messages in this thread