On 03/07/2016 09:46 AM, ZhangXiang wrote:
In python3, when I write code like this:
try:
fields = [getattr(Product, field) for field in fields.split(',')]
except AttributeError as e:
raise HTTPError(...)
I want to raise a new type of error giving a string telling the user which
attribute is not valid. But I don't see any method I can use to get the
attribute name except inspecting e.args[0].
Could anyone give me a hint? Maybe I miss something.
By the way, I don't quite want to change my code to a for-loop so I can access
the field variable in exception handling.
Hi,
It is strange to morph an AttributeError in an HTTPError, anyway, you
could write
try:
fields = [getattr(Product, field) for field in fields.split(',')]
except AttributeError as e:
raise HTTPError(str(e))
Or if you really need to write some custom message, you could parse the
attribute error message for the attribute name.
# I've not tested this code !!
import re
try:
fields = [getattr(Product, field) for field in fields.split(',')]
except AttributeError as e:
# e.message should look like "class Foo has no attribute 'a'"
attr = re.search(r"'(\w+)'", e.message).group(1)
raise HTTPError('Custom message for the attribute %s' % attr)
Tbh I don't like it but it could do the job until someone raises you an
attribute error with a different string pattern.
jm
--
https://mail.python.org/mailman/listinfo/python-list