diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2023-03-31 20:52:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-31 20:52:31 (GMT) |
commit | 2a4d8c0a9e88f45047da640ce5a92b304d2d39b1 (patch) | |
tree | 6c519d3b27d6424429b09196e02ad442dff5649c /Lib/enum.py | |
parent | dfc4c95762f417e84dcb21dbbe6399ab7b7cef19 (diff) | |
download | cpython-2a4d8c0a9e88f45047da640ce5a92b304d2d39b1.zip cpython-2a4d8c0a9e88f45047da640ce5a92b304d2d39b1.tar.gz cpython-2a4d8c0a9e88f45047da640ce5a92b304d2d39b1.tar.bz2 |
gh-102549: [Enum] fail enum creation when data type raises in __init__ (GH-103149)
Diffstat (limited to 'Lib/enum.py')
-rw-r--r-- | Lib/enum.py | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/Lib/enum.py b/Lib/enum.py index 8c77117..4e231e7 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -266,23 +266,20 @@ class _proto_member: args = (args, ) # wrap it one more time if not enum_class._use_args_: enum_member = enum_class._new_member_(enum_class) - if not hasattr(enum_member, '_value_'): + else: + enum_member = enum_class._new_member_(enum_class, *args) + if not hasattr(enum_member, '_value_'): + if enum_class._member_type_ is object: + enum_member._value_ = value + else: try: enum_member._value_ = enum_class._member_type_(*args) except Exception as exc: - enum_member._value_ = value - else: - enum_member = enum_class._new_member_(enum_class, *args) - if not hasattr(enum_member, '_value_'): - if enum_class._member_type_ is object: - enum_member._value_ = value - else: - try: - enum_member._value_ = enum_class._member_type_(*args) - except Exception as exc: - raise TypeError( - '_value_ not set in __new__, unable to create it' - ) from None + new_exc = TypeError( + '_value_ not set in __new__, unable to create it' + ) + new_exc.__cause__ = exc + raise new_exc value = enum_member._value_ enum_member._name_ = member_name enum_member.__objclass__ = enum_class |