catching exceptions in expressions

Vaclav Dvorak dvorakv at idas.cz
Thu Aug 7 14:34:15 EDT 2003


Hi,

Did I arouse nobody's interest except for Andrew? Nobody thinks catching 
exceptions inside expressions would be a cool feature to have?

Andrew Dalke wrote:
> Vaclav Dvorak:
> 
>>try: c = int(u)
>>except ValueError: c = 99
>>
>>Not enough to make me want to create a function, but enough to be
>>annoying. :-) I was thinking about something like this:
>>
>>a = int(s) except ValueError then 99
> 
> No.  In general, Python encourages new functions or
> classes over new syntax.

Well, list comprehensions were implemented, and that feature didn't even 
need anything new - not even functions, let alone syntax: "List 
comprehensions provide a concise way to create lists without resorting 
to use of map(), filter() and/or lambda." (Python Tutorial, 5.1.4.) So 
that gives me hope. :-)

> What's wrong with
> def safe_int(s, default):
[...]
> or for something more generic
> class TryCatcher:
[...]

Well, it's good when you will use than a hundred times. But when you 
need it only here and there, it's more hassle than it's worth.

>>a = int(s) or 99 if ValueError
> 
> Parse ambiguity.
> 
>   a = int(s) or 99
> 
> is valid Python today.

I'm not an expert in parsers, but wouldn't the "if" disambiguate it, as 
it's not otherwise found inside expressions? Or what if it was in 
parentheses:
 >>> a = int(s) (or 99 if ValueError)
This syntax has the advantage of not introducing any new keywords. I 
still like:
 >>> a = int(s) except ValueError then 99
somewhat better, though. But, it adds "then", and without it it wouldn't 
be so intuitive.

>>except ValueError:
>>         continue [execution on next line - my comment]
> 'continue' already has meaning in current Pythons.

That's why I chose that - no new keyword. But I retract this one, and 
the "retry" statement too. I don't really like them myself. :-)

>>Comments? Should I write a PEP? Am I missing something obvious? Has this
>>been debated a million times over already?
> 
> Feel free to write a PEP.  It won't be accepted.

Why? You're the only one who doesn't like it, so far. ;-) Of course, 
you're also the only one who voiced any opinion, so that leaves me with 
a not so huge statistical sample of one. :-)

Vaclav Dvorak  <dvorakv at idas.cz>





More information about the Python-list mailing list