2012-02-18 7 views
2

は、Python 3.2を使用して、私はhtml.parserdocumentationからまっすぐに例を試みた:代わりに文書で示された結果を得ることのhtml.parserは奇妙な行動

from html.parser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     print("Encountered a start tag:", tag) 
    def handle_endtag(self, tag): 
     print("Encountered an end tag :", tag) 
    def handle_data(self, data): 
     print("Encountered some data :", data) 

parser = MyHTMLParser(strict=False) 
parser.feed('<html><head><title>Test</title></head>' 
      '<body><h1>Parse me!</h1></body></html>') 

私が取得:いくつかのために

Encountered some data : <html> 
Encountered some data : <head> 
Encountered some data : <title> 
Encountered some data : Test 
Encountered an end tag : title 
Encountered an end tag : head 
Encountered some data : <body> 
Encountered some data : <h1> 
Encountered some data : Parse me! 
Encountered an end tag : h1 
Encountered an end tag : body 
Encountered an end tag : html 

理由、それはただのデータとして扱います。ただし、strict=Falseの場合のみです。 strict=True場合、私は正しい結果を得る:

Encountered a start tag: html 
Encountered a start tag: head 
Encountered a start tag: title 
Encountered some data : Test 
Encountered an end tag : title 
Encountered an end tag : head 
Encountered a start tag: body 
Encountered a start tag: h1 
Encountered some data : Parse me! 
Encountered an end tag : h1 
Encountered an end tag : body 
Encountered an end tag : html 
+0

これはバグのようです:少なくともドキュメントは変更する必要があります。それを提出することを検討してください:http://bugs.python.org/ –

答えて

2

をこの問題は修正されたバグ(http://bugs.python.org/issue13273)でした。実際にhttp://hg.python.org/cpython/log/9ce5d456138b/Lib/html/parser.pyを見ると、Strict=Falseの問題に関するログメッセージがたくさんあります。これはまだベータと見なされるべきであるように感じる。

ファイルの最新バージョン(http://hg.python.org/cpython/raw-file/9ce5d456138b/Lib/html/parser.py)を使用して、それを使用すると、少なくともドキュメントの例が再び機能します。それでも、個人的には、Strict = Falseを信用して、現時点で「重要なアプリケーション」で作業するのはちょっと疲れます。