case/switch statement?

invalidemail at aerojockey.com invalidemail at aerojockey.com
Sun Jun 12 05:25:52 EDT 2005


Philippe C. Martin wrote:
> Leif K-Brooks wrote:
>
> > Joe Stevenson wrote:
> >> I skimmed through the docs for Python, and I did not find anything like
> >> a case or switch statement.  I assume there is one and that I just
> >> missed it.  Can someone please point me to the appropriate document, or
> >> post an example?  I don't relish the idea especially long if-else
> >> statements.
> >
> > If you really want one, you could use
> > <http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410692>.
>
> I _love_ Python!


Well, if you loved that, here's something even more evil.  This was
Bengt Richter's original idea that Cliff Wells and I improved upon.
First define some functions and classes:

. _cache = {}
.
. class _BaseCaseException(Exception):
.     pass
.
. def switch(v):
.     if v not in _cache:
.         class _CaseException(_BaseCaseException):
.             pass
.         _cache[v] = _CaseException
.     raise _cache[v]
.
. def case(v):
.     if v not in _cache:
.         class _CaseException(_BaseCaseException):
.             pass
.         _cache[v] = _CaseException
.     return _cache[v]
.
. default = _BaseCaseException


Then you can define a switch statement like this:

. x = 2
.
. try: switch(x)
.
. except case(1):
.     print "Case 1"
.
. except case(2):
.     print "Case 2"
.
. except case(3):
.     print "Case 3"
.
. except default:
.     print "Default"
.
. except NameError:
.     print "You can still catch regular exceptions like NameError"



I-love-Python-too-but-this-isn't-why-ly yr's,

-- 
CARL BANKS




More information about the Python-list mailing list