From f1d40f941a6483b1d4ea10f1051ace7b426fb8e7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 27 Jul 2020 04:48:17 +0300 Subject: [PATCH] bpo-41384: Raise TclError in tkinter.OptionMenu (GH-21601) ... when an unknown option is passed. TypeError was being raised because a 2to3 fix was missing. Co-authored-by: Terry Jan Reedy --- Lib/tkinter/__init__.py | 2 +- Lib/tkinter/test/test_tkinter/test_widgets.py | 4 ++++ .../next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index a3378d012fb..1067ab6a8b8 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -3965,7 +3965,7 @@ class OptionMenu(Menubutton): if 'command' in kwargs: del kwargs['command'] if kwargs: - raise TclError('unknown option -'+kwargs.keys()[0]) + raise TclError('unknown option -'+next(iter(kwargs))) menu.add_command(label=value, command=_setit(variable, value, callback)) for v in values: diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py index 16e9d93944c..721e81369a8 100644 --- a/Lib/tkinter/test/test_tkinter/test_widgets.py +++ b/Lib/tkinter/test/test_tkinter/test_widgets.py @@ -307,6 +307,10 @@ class OptionMenuTest(MenubuttonTest, unittest.TestCase): def create(self, default='b', values=('a', 'b', 'c'), **kwargs): return tkinter.OptionMenu(self.root, None, default, *values, **kwargs) + def test_bad_kwarg(self): + with self.assertRaisesRegex(TclError, r"^unknown option -image$"): + tkinter.OptionMenu(self.root, None, 'b', image='') + @add_standard_options(IntegerSizeTests, StandardOptionsTests) class EntryTest(AbstractWidgetTest, unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst b/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst new file mode 100644 index 00000000000..d797374a09e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-07-26-21-18-43.bpo-41384.MlzIgV.rst @@ -0,0 +1,2 @@ +Raise TclError instead of TypeError when an unknown option is passed to +tkinter.OptionMenu.