diff options
-rw-r--r-- | Doc/library/html.parser.rst | 4 | ||||
-rw-r--r-- | Lib/html/parser.py | 14 | ||||
-rw-r--r-- | Lib/test/test_htmlparser.py | 17 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
4 files changed, 29 insertions, 9 deletions
diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst index e4154ef..0ea9644 100644 --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -74,7 +74,7 @@ as they are encountered:: def handle_data(self, data): print("Encountered some data :", data) - parser = MyHTMLParser(strict=False) + parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>' '<body><h1>Parse me!</h1></body></html>') @@ -272,7 +272,7 @@ examples:: def handle_decl(self, data): print("Decl :", data) - parser = MyHTMLParser(strict=False) + parser = MyHTMLParser() Parsing a doctype:: diff --git a/Lib/html/parser.py b/Lib/html/parser.py index 18f3115..d7541ae 100644 --- a/Lib/html/parser.py +++ b/Lib/html/parser.py @@ -94,6 +94,8 @@ class HTMLParseError(Exception): return result +_strict_sentinel = object() + class HTMLParser(_markupbase.ParserBase): """Find tags and other markup and call handler functions. @@ -116,16 +118,18 @@ class HTMLParser(_markupbase.ParserBase): CDATA_CONTENT_ELEMENTS = ("script", "style") - def __init__(self, strict=False): + def __init__(self, strict=_strict_sentinel): """Initialize and reset this instance. If strict is set to False (the default) the parser will parse invalid markup, otherwise it will raise an error. Note that the strict mode - is deprecated. + and argument are deprecated. """ - if strict: - warnings.warn("The strict mode is deprecated.", + if strict is not _strict_sentinel: + warnings.warn("The strict argument and mode are deprecated.", DeprecationWarning, stacklevel=2) + else: + strict = False # default self.strict = strict self.reset() @@ -151,6 +155,8 @@ class HTMLParser(_markupbase.ParserBase): self.goahead(1) def error(self, message): + warnings.warn("The 'error' method is deprecated.", + DeprecationWarning, stacklevel=2) raise HTMLParseError(message, self.getpos()) __starttag_text = None diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py index b15b6fd..6ebf5b8 100644 --- a/Lib/test/test_htmlparser.py +++ b/Lib/test/test_htmlparser.py @@ -96,7 +96,9 @@ class TestCaseBase(unittest.TestCase): parser = self.get_collector() parser.feed(source) parser.close() - self.assertRaises(html.parser.HTMLParseError, parse) + with self.assertRaises(html.parser.HTMLParseError): + with self.assertWarns(DeprecationWarning): + parse() class HTMLParserStrictTestCase(TestCaseBase): @@ -360,7 +362,16 @@ text class HTMLParserTolerantTestCase(HTMLParserStrictTestCase): def get_collector(self): - return EventCollector(strict=False) + return EventCollector() + + def test_deprecation_warnings(self): + with self.assertWarns(DeprecationWarning): + EventCollector(strict=True) + with self.assertWarns(DeprecationWarning): + EventCollector(strict=False) + with self.assertRaises(html.parser.HTMLParseError): + with self.assertWarns(DeprecationWarning): + EventCollector().error('test') def test_tolerant_parsing(self): self._run_check('<html <html>te>>xt&a<<bc</a></html>\n' @@ -676,7 +687,7 @@ class AttributesStrictTestCase(TestCaseBase): class AttributesTolerantTestCase(AttributesStrictTestCase): def get_collector(self): - return EventCollector(strict=False) + return EventCollector() def test_attr_funky_names2(self): self._run_check( @@ -31,6 +31,9 @@ Core and Builtins Library ------- +- Issue #15114: The html.parser module now raises a DeprecationWarning when the + strict argument of HTMLParser or the HTMLParser.error method are used. + - Issue #19410: Undo the special-casing removal of '' for importlib.machinery.FileFinder. |