bpo-39728: Enum: fix duplicate `ValueError` (GH-22277)
fix default `_missing_` to return `None` instead of raising a `ValueError` Co-authored-by: Andrey Darascheka <andrei.daraschenka@leverx.com>
This commit is contained in:
parent
83f6dcd207
commit
c95ad7a91f
|
@ -629,7 +629,7 @@ class Enum(metaclass=EnumMeta):
|
|||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
raise ValueError("%r is not a valid %s" % (value, cls.__qualname__))
|
||||
return None
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s.%s: %r>" % (
|
||||
|
|
|
@ -1845,6 +1845,18 @@ class TestEnum(unittest.TestCase):
|
|||
third = auto()
|
||||
self.assertEqual([Dupes.first, Dupes.second, Dupes.third], list(Dupes))
|
||||
|
||||
def test_default_missing(self):
|
||||
class Color(Enum):
|
||||
RED = 1
|
||||
GREEN = 2
|
||||
BLUE = 3
|
||||
try:
|
||||
Color(7)
|
||||
except ValueError as exc:
|
||||
self.assertTrue(exc.__context__ is None)
|
||||
else:
|
||||
raise Exception('Exception not raised.')
|
||||
|
||||
def test_missing(self):
|
||||
class Color(Enum):
|
||||
red = 1
|
||||
|
@ -1863,7 +1875,12 @@ class TestEnum(unittest.TestCase):
|
|||
# trigger not found
|
||||
return None
|
||||
self.assertIs(Color('three'), Color.blue)
|
||||
self.assertRaises(ValueError, Color, 7)
|
||||
try:
|
||||
Color(7)
|
||||
except ValueError as exc:
|
||||
self.assertTrue(exc.__context__ is None)
|
||||
else:
|
||||
raise Exception('Exception not raised.')
|
||||
try:
|
||||
Color('bad return')
|
||||
except TypeError as exc:
|
||||
|
|
|
@ -433,6 +433,7 @@ Marcos Donolo
|
|||
Dima Dorfman
|
||||
Yves Dorfsman
|
||||
Michael Dorman
|
||||
Andrey Doroschenko
|
||||
Steve Dower
|
||||
Allen Downey
|
||||
Cesar Douady
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
fix default `_missing_` so a duplicate `ValueError` is not set as the `__context__` of the original `ValueError`
|
Loading…
Reference in New Issue