bool(Enum) should raise ValueError

Erik Aronesty earonesty at gmail.com
Sun Jul 28 16:46:35 EDT 2019


class Status:
  valid = 1
  invalid = 2
  unknown = 3




On Fri, Jul 26, 2019, 3:37 PM Chris Angelico <rosuav at gmail.com> wrote:

> On Sat, Jul 27, 2019 at 5:16 AM Erik Aronesty <erik at q32.com> wrote:
> >
> > I just spend a while tracking down and killing all "if Enum" and "if not
> > Enum" bugs in my code.   I was frankly shocked that this didn't raise a
> > ValueError to begin with.
> >
> > Apparently all enums are true/false depending on whether the underlying
> > value is truthy or falsy.
> >
> > Which breaks the abstraction Enum's are trying to achieve because now the
> > user of an Enum has to know "stuff" about the underlying value and how it
> > behaves.
>
> If you want to abstract away the underlying value, just don't have one?
>
> >>> from enum import Enum, auto
> >>> class Color(Enum):
> ...     red = auto()
> ...     green = auto()
> ...     blue = auto()
> ...
> >>> bool(Color.red)
> True
> >>> bool(Color.green)
> True
> >>> bool(Color.blue)
> True
>
> They happen to have the values 1, 2, and 3, but that doesn't matter.
>
> When an enum has to correspond to a real underlying value, it behaves
> as similarly to that value as possible:
>
> >>> http.HTTPStatus.METHOD_NOT_ALLOWED == 405
> True
>
> Thus it should also inherit its truthiness from that value.
>
> ChrisA
> --
> https://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list