On 2/21/2014, 7:42 PM, Ethan Furman wrote:
On 02/21/2014 11:04 AM, Yury Selivanov wrote:
On 2/20/2014, 10:15 PM, Chris Angelico wrote:
* list.pop() - no way to return a default
We can fix that in 3.5.
How many are you going to "fix"? How are you going to "fix" the
routines you don't control?
This new syntax won't magically fix all the code either.
But it may let people write code like this:
# I'm sorry, I really can't read this.
logging.info("Message shown to user: %s",((cache[k]
except LookupError:
(backend.read(k) except OSError: 'Resource not available')
)
if check_permission(k) else 'Access denied'
) except BaseException: "This is like a bare except clause")
or this:
# We happily mask exceptions from getgrnam
g = grp.getgrnam(tarinfo.gname)[2] except KeyError: tarinfo.gid
And this particular case or list.pop method, let's be honest,
can be fixed ;)
* seq[index] - no way to handle a bounds error
We can add 'list.get(index, default)' method, similar to
'Mapping.get'. It's far more easier than introducing new
syntax.
When I have to keep writing the same code over and over and aver
again, I find a better way to do the job. In this case, an exception
expression does quite nicely.
I can't believe you find
list[42] except IndexError: 'spam'
to be better than
list.get(42, 'spam')
If IndexError is such a big deal, I think we can add this function
to list and collections.abc.Sequence. Authors of libraries
will follow.
I also searched how many 'except IndexError' are in
the standard library code. Around 60. That's a rather
low number, that can justify adding 'list.get' but not
advocate a new syntax.
And roughly 200 of KeyError, another couple hundred of ValueError...
Many KeyErrors can be fixed with a proper use of '.get()', or 'in'
operator.
Many AttributeErrors can be fixed with use of getattr() or
hasattr(), or by designing a better API.
Many ValueErrors... wait, there are no ValueError examples
in the PEP, so I won't comment.
This is not just about better handling of [missing] default values,
but of better exception handling. This PEP adds the ability to use a
scalpel instead of a sledge hammer.
I'd say it's another sledge-hammer, but a tad smaller and a cuter
one (to some people). But it's still exception handling, still
more code than a function call.
Yury
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com