我目前正在尝试将旧的python应用程序移植到版本3.在这样做的过程中,应用程序现在在尝试将数据输出到文本文件时崩溃:
parser.py, line 110
AttributeError("'HTMLPlusParser' object has no attribute 'rawdata'",),None)
我不确定如何为这种特殊情况制作一个MVC示例,这里是重温代码:
HTMLPlus.py
class HTMLPlusParser(HTMLParser):
def __init__(self, formatter, verbose = None):
if verbose and not hasattr(verbose, "write"):
verbose = sys.stderr
HTMLParser.__init__(self, formatter, verbose)
self.reparsestack = []
self.tdelt = []
ReportWindow.py
def parseConfigReport(self, filename, scxmldoc):
source = etree.fromstring(scxmldoc.toxml())
try:
xslt_xml = etree.parse(filename)
transform = etree.XSLT(xslt_xml)
report = transform(source)
self.reportHtml = str(report)
def saveToText(self):
filename = os.path.join(self.parent.ReportPath, str(self.parent.CharName.text()) + "_report.txt")
filename, filters = QFileDialog.getSaveFileName(self, "Save Report", filename, "Text (*.txt);;All Files (*.*)")
if filename is not None and str(filename) != '':
try:
if re.compile('\.txt$').search(str(filename)) is None:
filename = str(filename)
filename += '.txt'
f = open(str(filename), 'w')
w = DimWriter(f)
s = ObtuseFormatter(w)
p = HTMLPlusParser(s)
p.feed(self.reportHtml)
p.close()
w.flush()
f.close()
self.parent.ReportPath = os.path.dirname(os.path.abspath(str(filename)))
except IOError:
QMessageBox.critical(None, 'Error!', 'Error writing to file: ' + filename, 'OK')
def handle_data(self, data):
if len(self.reparsestack):
self.reparsestack[-1].append((getattr(self, 'handle_data'), data,))
HTMLParser.handle_data(self, data)
def handle_starttag(self, tag, method, attrs):
if self.reparsestack:
self.reparsestack[-1].append((method, attrs,))
HTMLParser.handle_starttag(self, tag, method, attrs)
def handle_endtag(self, tag, method):
if self.tdelt:
self.tdelt[-1].append((method,))
HTMLParser.handle_endtag(self, tag, method)
我是python的新手,这不是我的应用程序(开源),而且我没有太多将数据输出到文件的经验。
话虽如此,我真的不明白我为什么会遇到崩溃,特别是在一个属于图书馆的文件中,而且我不知道我需要做些什么来解决这个问题
我尝试过改变:
HTMLParser.__init__(self, formatter, verbose) --> HTMLParser.__init__(self)
正如在另一个帖子中所建议的那样,但那并没有奏效。我不确定从哪里开始。有什么想法吗?
我知道格式化程序已被折旧..不知道用什么来代替它。如果这是我自己的代码,这可能会更容易。
更新:
将HTMLPlus init移出if语句允许我推翻此异常,但导致另一个异常
TypeError("handle_starttag() missing 1 required positional argument: 'attrs'",) in parse_starttag.parser.py:345
此异常再次发生在库文件parser.py中,并且看起来这些变量是在该文件中分配的。
UPDATE2:
我意识到htmllib现在是html.parser。这是我需要从Python 2.x到Python 3.x的变化。鉴于这种变化,API中是否有某些变化?我似乎无法找到任何暗示这一点的文献,而且这在2to3转换之前有效。