[Enum] update class creation for RuntimeError changes (GH-111815)
This commit is contained in:
parent
e723700190
commit
f9e6ce0395
@ -1439,7 +1439,6 @@ alias::
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: aliases not allowed in DuplicateFreeEnum: 'GRENE' --> 'GREEN'
|
||||
Error calling __set_name__ on '_proto_member' instance 'GRENE' in 'Color'
|
||||
|
||||
.. note::
|
||||
|
||||
|
14
Lib/enum.py
14
Lib/enum.py
@ -568,12 +568,16 @@ class EnumType(type):
|
||||
try:
|
||||
exc = None
|
||||
enum_class = super().__new__(metacls, cls, bases, classdict, **kwds)
|
||||
except RuntimeError as e:
|
||||
# any exceptions raised by member.__new__ will get converted to a
|
||||
# RuntimeError, so get that original exception back and raise it instead
|
||||
exc = e.__cause__ or e
|
||||
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))
|
||||
exc.__cause__ = e.__cause__
|
||||
exc.__context__ = e.__context__
|
||||
tb = e.__traceback__
|
||||
if exc is not None:
|
||||
raise exc
|
||||
raise exc.with_traceback(tb)
|
||||
#
|
||||
# update classdict with any changes made by __init_subclass__
|
||||
classdict.update(enum_class.__dict__)
|
||||
|
Loading…
x
Reference in New Issue
Block a user