diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index 4b1b4e193cb165..e2becb74a1c1af 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -342,6 +342,13 @@ def test_filterwarnings_duplicate_filters(self): "the beginning of list" ) + def test_simplefilter_invalid_category(self): + with original_warnings.catch_warnings(record=True, module=self.module): + invalid_category = 'spam' + with self.assertRaises(AssertionError) as cm: + self.module.simplefilter("once", invalid_category) + self.assertEqual(str(cm.exception), "category must be a class") + def test_simplefilter_duplicate_filters(self): with original_warnings.catch_warnings(module=self.module): self.module.resetwarnings() diff --git a/Lib/warnings.py b/Lib/warnings.py index 691ccddfa450ad..5df7c8c29a7cc9 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -176,6 +176,7 @@ def simplefilter(action, category=Warning, lineno=0, append=False): "once"), "invalid action: %r" % (action,) assert isinstance(lineno, int) and lineno >= 0, \ "lineno must be an int >= 0" + assert isinstance(category, type), "category must be a class" _add_filter(action, None, category, None, lineno, append=append) def _add_filter(*item, append): diff --git a/Misc/NEWS.d/next/Library/2021-06-12-20-21-40.bpo-16845.SqR6Ik.rst b/Misc/NEWS.d/next/Library/2021-06-12-20-21-40.bpo-16845.SqR6Ik.rst new file mode 100644 index 00000000000000..8678300e12a5db --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-12-20-21-40.bpo-16845.SqR6Ik.rst @@ -0,0 +1 @@ +Add category type check to warnings.simplefilter.