From: Ethan Furman Date: Thu, 17 Sep 2020 00:38:14 +0000 (-0700) Subject: [3.8] bpo-39728: Enum: fix duplicate `ValueError` (GH-22277) (GH-22283) X-Git-Tag: v3.8.6~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5efb1a77e75648012f8b52960c8637fc296a5c6d;p=thirdparty%2FPython%2Fcpython.git [3.8] bpo-39728: Enum: fix duplicate `ValueError` (GH-22277) (GH-22283) fix default `_missing_` to return `None` instead of raising a `ValueError` Co-authored-by: Andrey Darascheka . (cherry picked from commit c95ad7a91fbd7636f33a098d3b39964ab083bf49) Co-authored-by: Ethan Furman --- diff --git a/Lib/enum.py b/Lib/enum.py index c2adfd1c6c0b..de9ed4c1ec37 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -634,7 +634,7 @@ class Enum(metaclass=EnumMeta): @classmethod def _missing_(cls, value): - raise ValueError("%r is not a valid %s" % (value, cls.__name__)) + return None def __repr__(self): return "<%s.%s: %r>" % ( diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index daa44ae6824c..745962a1e66f 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1834,6 +1834,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 @@ -1852,7 +1864,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: diff --git a/Misc/ACKS b/Misc/ACKS index e6d0c3ba1270..eee6b9accaa5 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -421,6 +421,7 @@ Marcos Donolo Dima Dorfman Yves Dorfsman Michael Dorman +Andrey Doroschenko Steve Dower Allen Downey Cesar Douady diff --git a/Misc/NEWS.d/next/Library/2020-02-24-10-58-34.bpo-39728.kOOaHn.rst b/Misc/NEWS.d/next/Library/2020-02-24-10-58-34.bpo-39728.kOOaHn.rst new file mode 100644 index 000000000000..beb2016a85ba --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-02-24-10-58-34.bpo-39728.kOOaHn.rst @@ -0,0 +1 @@ +fix default `_missing_` so a duplicate `ValueError` is not set as the `__context__` of the original `ValueError`