Bug report
Bug description:
With #111815, any exception raised inside the __init__ method of an enum class 1 is expected to be:
- instantiable (not the case with Pydantic
ValidationErrors, see Python 3.12 Enum Class Validated Initialization TypeError pydantic/pydantic#10593) - instantiable and expected to take a single argument.
| try: | |
| exc = None | |
| classdict['_%s__in_progress' % cls] = True | |
| enum_class = super().__new__(metacls, cls, bases, classdict, **kwds) | |
| classdict['_%s__in_progress' % cls] = False | |
| delattr(enum_class, '_%s__in_progress' % cls) | |
| except Exception as e: | |
| # since 3.12 the line "Error calling __set_name__ on '_proto_member' instance ..." | |
| # is tacked on to the error instead of raising a RuntimeError | |
| # recreate the exception to discard | |
| exc = type(e)(str(e)) |
Meaning the following raises a TypeError instead of the expected MyValueError:
class MyValueError(ValueError): def __init__(self, t: str, v: int) -> None: self.t = t self.v = v class ValidatedEnum(Enum): def __init__(self, value): raise MyValueError("", 1) class MyValidatedEnum(ValidatedEnum): FOO = "foo" # TypeError: MyValueError.__init__() missing 1 required positional argument: 'v'
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
- gh-125259: Fix error notes removal in enum initialization #125647
- [3.13] gh-125259: Fix error notes removal in enum initialization (GH-125647) #125858
- [3.12] gh-125259: Fix error notes removal in enum initialization (GH-125647) #125953