使用Python 3的html.parser的getpos()方法的正确方法是什么?
我使用下面的示例来研究html.parser方法的子集:
https://docs.python.org/3/library/html.parser.html#examples
我的复制粘贴演示程序可以工作,但是现在我想使用 html.parser 的getpos()方法来获取标记的行号和偏移量。
经过无数次的实验,包括尝试给示例中给出的类添加一个单独的 def getpos() 方法(没有任何输出),我能够让getpos()返回其行号和偏移元组的唯一方法是在下面代码片段的第4行插入一行(在我看来)笨拙而丑陋的代码:
from html.parser import HTMLParser
...
class FlareTopicParser(HTMLParser):
def handle_starttag(self, tag, attrs):
# Following line inserted by me into class's examples.
print(" Line, offset ==", HTMLParser.getpos(self))
# This working code from examples per
# https://docs.python.org/3/library/html.parser.html#examples
print(" Start tag:", tag)
for attr in attrs:
print(" attr:", attr)
这是可行的--仅给予一个例子,对于它打印的HTML输入文件第5行上缩进为零的开始标记:
Line, offset == (5, 0)
但是示例代码第4行中的HTMLParser.getpos(self)
构造似乎(对于这位偶尔的Python 3编码者来说)笨拙且错误。
使用getpos()的正确方法是什么,或者如果您愿意,使用getpos()的更好方法是什么?
2条答案
按热度按时间laik7k3q1#
不需要在解析器中重写
getpos
;我建议将第4行改写如下:通过这种对
getpos()
的调用,您还可以单独使用line
或column
。relj7zay2#
下面是使用
getpos()
的方法: