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

Michael Foord fuzzyman at voidspace.org.uk
Fri Aug 7 13:22:57 CEST 2009




--
http://www.ironpythoninaction.com

On 7 Aug 2009, at 12:06, ilya <ilya.nikokoshev at gmail.com> wrote:

> I believe people now discuss this both on python-dev and python-ideas,
> though since I'm new to both lists, I can't really tell where this
> belongs.
>

It definitely belongs on the ideas list...

Michael




> I played a little with this syntax, my try_ function and @catch
> decorator (which are at http://mit.edu/~unknot/www/try_cond.py):
>
>    #   x = float(string) except float('nan') if ValueError
>    x = try_(float, string, except_ = float('nan'), if_ = ValueError)
>
>    @catch(ValueError = float('nan'))
>    def x1(): return float(string)
>
>    #   y = float(string) except ValueError: float('nan')
>    y = try_(float, string, { ValueError: float('nan') })
>
>    @catch({ValueError: float('nan')})
>    def y1(): return float(string)
>
>    #   try:
>    #       z = open(string, 'r')
>    #   except IOError as e:
>    #       if e.errno == 2:
>    #               z = 'not_exist'
>    #       else:
>    #               raise
>    #
>    z = try_(open, string, 'r', iocatcher({2: 'no file!'}))
>
>    @catch(iocatcher({2: 'nothing!'}))
>    def z1(): return open(string, 'r')
>
> Here are my overall feelings:
>
> (1) it would be interesting to come up with syntax for except/if
> clause, but it's not obvious how to make one and this fact itself may
> kill the idea.
> (2) the more reasonable approach to things like this is by defining a
> separate block and then performing a "catch" operation with it.
> Unfortunately, this looks very clumsy as currently this can only be
> done by defining a separate function. I think code blocks are a good
> direction to explore.
>
> 2009/8/7 Kristján Valur Jónsson <kristjan at ccpgames.com>:
>> Unless I am very much mistaken, this is the approach Ruby takes.
>> Everything is an expression.  For example, the value of a block is  
>> the value of
>> The last expression in the block.
>>
>> I've never understood the need to have a distinction betwen  
>> statements and expressions, not when expressions can have side  
>> effects.  It's like that differentce between procedures and  
>> functions in pascal that only serves to confuse
>>
>> K
>>> -----Original Message-----
>>> From: python-dev-bounces+kristjan=ccpgames.com at python.org
>>> [mailto:python-dev-bounces+kristjan=ccpgames.com at python.org] On  
>>> Behalf
>>> Of Xavier Morel
>>> Sent: 6. ágúst 2009 10:25
>>> To: python-dev at python.org
>>> Subject: Re: [Python-Dev] (try-except) conditional expression  
>>> similar
>>> to (if-else) conditional (PEP 308)
>>
>>
>>> Wouldn't it be smarter to fix the issue once and for all by looking
>>> into making Python's compound statements (or even all statements
>>> without restrictions) expressions that can return values in the  
>>> first
>>> place? Now I don't know if it's actually possible, but if it is the
>>> problem becomes solved not just for try:except: (and twice so for
>>> if:else:) but also for while:, for: (though that one's already  
>>> served
>>> pretty well by comprehensions) and with:.
>>>
>>
>> _______________________________________________
>> Python-Dev mailing list
>> Python-Dev at python.org
>> http://mail.python.org/mailman/listinfo/python-dev
>> Unsubscribe: http://mail.python.org/mailman/options/python-dev/ilya.nikokoshev%40gmail.com
>>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk


More information about the Python-Dev mailing list