撞车分析器.py试图将数据输出为文本文件时。。不知道为什么

2021-09-16 23:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试将一个旧的python应用程序移植到版本3。在此过程中,应用程序现在在尝试将数据输出到文本文件时崩溃:

parser.py, line 110 

AttributeError("'HTMLPlusParser' object has no attribute 'rawdata'",),None)

我不太清楚如何为这种特殊情况创建一个MVC示例,下面是relivent代码:

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

这个异常同样发生在库文件中分析器.py这些变量似乎是在那个文件中分配的。你知道吗

更新2:

我知道htmlib现在html.parser语法分析器. 从Python2.x到Python3.x,这是我需要做的一个更改。考虑到这个更改,API中是否有更改?我似乎找不到任何文献表明这一点,而且这在2to3转化之前就起作用了。你知道吗