summaryrefslogtreecommitdiffstats
path: root/Lib/enum.py
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2023-03-31 20:52:31 (GMT)
committerGitHub <noreply@github.com>2023-03-31 20:52:31 (GMT)
commit2a4d8c0a9e88f45047da640ce5a92b304d2d39b1 (patch)
tree6c519d3b27d6424429b09196e02ad442dff5649c /Lib/enum.py
parentdfc4c95762f417e84dcb21dbbe6399ab7b7cef19 (diff)
downloadcpython-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.py25
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