尝试将数据作为文本文件输出时崩溃在parser.py ..不明白为什么

时间:2017-11-04 16:56:28

标签: python python-3.x formatter html-parser

我目前正在尝试将旧的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转换之前有效。

0 个答案:

没有答案