Greg Ewing wrote:
> > You can reduce the amount of boilerplate by doing something
> like this:
> class MySpecialException(Exception):
> pass
> def handle_my_special_exception(a, b, c, d, e, f):
> ....
> try:
> if some_test_that_fails(variables):
> raise MySpecialException(a, b, c, d, e, f)
> except MySpecialException as e:
> if not handle_my_special_exception(*e.args):
> raise
Yeah, I could remove some of the argument assignment, but I think your example
points out even more strongly how useless that class was in managing the
exception. It is literally just a name that I am forced to define outside the
flow of logic. If exceptions had less boilerplate they might get used more
often with more description. It would be great to get a KeyError like this:
try:
if c[name] == 'fried chicken':
eat(c[name])
except KeyError.missingKey(key):
c[key] = getMoreChicken()
A little contrived since the key name is available in the same scope, but the
clarity of passing a variable along with the exception in a function like
syntax makes the handler more obvious and the ease of throwing these named
returns would likely lead to more exception handling instead of checking first
then doing it. Even without the parameters, this on the fly exception
definition would be useful and encourage code clarity. You could do things like:
try:
r = requests.get(some_url)
except HTTPError.notFound(url):
print(f"{url} not found. Try another one")
except HTTPError:
print(f"Unknown HTTP Error that doesn't obviously advertise its self! PANIC")
raise
Of course, again, looking at the requests code shows just how much boilerplate
these things take up. The base class RequestException has some code in it but
then there are 22 derived exceptions. So many classes defined just to give a
name to an exception and none of them have special parameters guaranteed in the
exception that might help you better handle what happened.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/KNGACZYDMKYYD7TDXRBE2LOZWQJHIWGK/
Code of Conduct: http://python.org/psf/codeofconduct/