diff --git a/Lib/warnings.py b/Lib/warnings.py index 3bfba9749abe33..277257548df5ff 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -130,6 +130,12 @@ def _formatwarnmsg(msg): msg.filename, msg.lineno, msg.line) return _formatwarnmsg_impl(msg) +def _valid_warning_category(category): + """Return True if category is a Warning subclass or tuple of such.""" + if isinstance(category, tuple): + return all(isinstance(c, type) and issubclass(c, Warning) for c in category) + return isinstance(category, type) and issubclass(category, Warning) + def filterwarnings(action, message="", category=Warning, module="", lineno=0, append=False): """Insert an entry into the list of warnings filters (at the front). @@ -145,8 +151,9 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0, assert action in ("error", "ignore", "always", "default", "module", "once"), "invalid action: %r" % (action,) assert isinstance(message, str), "message must be a string" - assert isinstance(category, type), "category must be a class" - assert issubclass(category, Warning), "category must be a Warning subclass" + if not _valid_warning_category(category): + raise TypeError("category must be a Warning subclass, " + "not '{:s}'".format(type(category).__name__)) assert isinstance(module, str), "module must be a string" assert isinstance(lineno, int) and lineno >= 0, \ "lineno must be an int >= 0" @@ -177,6 +184,9 @@ def simplefilter(action, category=Warning, lineno=0, append=False): """ assert action in ("error", "ignore", "always", "default", "module", "once"), "invalid action: %r" % (action,) + if not _valid_warning_category(category): + raise TypeError("category must be a Warning subclass, " + "not '{:s}'".format(type(category).__name__)) assert isinstance(lineno, int) and lineno >= 0, \ "lineno must be an int >= 0" _add_filter(action, None, category, None, lineno, append=append) diff --git a/Misc/ACKS b/Misc/ACKS index a6e63a991f9288..6da74cdb5d645e 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -2093,5 +2093,6 @@ Jelle Zijlstra Gennadiy Zlobin Doug Zongker Peter Åstrand +Hasrat Ali Arzoo (Entries should be added in rough alphabetical order by last names)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: