On Wed, Mar 17, 2021, 5:34 AM Serhiy Storchaka <storch...@gmail.com> wrote:

> 12.03.21 23:48, Ethan Furman пише:
> > A question that comes up quite a bit on Stackoverflow is how to test to
> > see if a value will result in an Enum member, preferably without having
> > to go through the whole try/except machinery.
> >
> ...
> > Thoughts?
>
> The Enum class is already too overloaded. I sometimes think about adding
> SimpleEnum class with minimal simple functionality which would allow to
> use enums in more modules sensitive to import time.
>
> As for solving your problem, try/except looks the best solution to me.
>
>     try:
>         Color(1)
>     except ValueError:
>         ... # invalid color
>     else:
>         ... # valid color
>
> If you don't like try/except, the second best solution is to add a
> module level helper in the enum module:
>
>     def find_by_value(cls, value, default=None):
>         try:
>             return cls(value)
>         except ValueError:
>             return default
>
> You can add also find_all_by_value(), get_aliases(), etc. It is
> important that they are module-level function, so they do not spoil the
> namespace of the Enum class.
>


+1 on a module level helper.

The preponderance of stackoverflow questions seem convincing enough that
people want to do this and it seems like a reasonable request. And I have
wanted to do something like this myself, so I'd probably use it. I see it
as analogous to situations when you want to use dict.get(key) instead of
dict[key].

But adding a non-dunder method to the Enum class namespace seems more
suboptimal to me compared to a module level helper, because of the
namespace spoiling/crowding issue. No matter what method name were to be
chosen, someone at some point would want to use it as an Enum member name
(unless of course it's a reserved dunder method).
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/5G7OWMOQT4QUJIDBTRZKBI7PZWEZZNBJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to