Steven D'Aprano dixit (2011-10-08, 22:23):
Ron Adam wrote:
What if you can catch an exception specifically from a particular function or method, but let other unexpected "like" exceptions bubble through...
try: ... i = s.index('bar') ... except ValueError from s.index as exc: <handle s.index ValueError>
I can't imagine that this would even be *possible*, but even if it is, I would say it certainly isn't *desirable*.
(1) You're repeating code you expect to fail: you write s.index twice, even though it only gets called once.
(2) The semantics are messy and unclear. Suppose you have this:
try: ... i = s.index(a) j = s.index(b) + s.index(c) t = s k = t.index(d) method = s.index l = method(e) ... except ValueError from s.index: ...
Which potential s.index exceptions will get caught? All of them? Some of them? Only i and j? What if you want to catch only some but not others?
Maybe labeling interesting lines of code could be more suitable? E.g.:
try: ... 'risky one' i = s.index('bar') ... except ValueError from 'risky one' as exc: <handle ValueError raised at the line preceded by lone 'risky one' string literal>