This doesn't not intent to be nor became a standard. Instead it's thought to be a proof of concept for a construction which mimics switch/case statements. I think it's funny, so, i'll hope you enjoy it as I do.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | from __future__ import with_statement
from contextlib import contextmanager
@contextmanager
def Switch():
    D = {}
    class _P(Exception): pass
    def _mkCase(var):
        class _PP(_P):
            V = var
            def __repr__(self):
                return str(self.V)
        D[var]=_PP
        return _PP
        
    def switch(var):
        if D.has_key(var):
            raise D[var]()
        raise _mkCase(var)()
    
    def case(var):
        if D.has_key(var):
            return D[var]
        return _mkCase(var)
    def default():
        return _P
        
    yield switch, case, default    
    
if __name__=="__main__":
    def test1():
        with Switch() as (switch, case, default):
            try: switch(55)
            except case(1):
                print 1
            except case(6):
                print 6
            except case(5):
                print 5
            except default():
                print 'default..'
    
    def test2():
        with Switch() as (switch, case, default):
            try:switch('hola')
            except case(1):
                print 1
            except case('holaS'):
                print 'holaS'
            except case('hola'):
                print 'hola'
            except default():
                print 'default..'
                
                
    test1()
    test2()
 | 
Discussion is open :-)

 Download
Download Copy to clipboard
Copy to clipboard
Whats wrong with using dictionaries instead of Exceptions. Using exceptions to implement a switch syntax seems to be a misuse of exceptions to me. I always thought dictionaries are the way to go:
Whats wrong with using dictionaries instead of Exceptions. There's nothing wrong.
That's the way to do kind-of switch, other way is to have something polymorphic.
I've made as an exercise.
Functions! I've found that functions are typically replaced with a None in a dictionary. This seems to be the only way to get around it.