我昨天安装了一个 stripe 包,但现在我的应用程序没有运行。我试图了解问题出在哪里。与
PyShell
或HTLParser
或其他什么有关吗?我也用 GAE 标签发帖,希望日志中的跟踪可以提供有关问题的线索:
MLStripper instance has no attribute 'rawdata'
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
handler.post(*groups)
File "/base/data/home/apps/ting-1/1.354723388329082800/ting.py", line 2070, in post
pitch_no_tags = strip_tags(pitch_original)
File "/base/data/home/apps/ting-1/1.354723388329082800/ting.py", line 128, in strip_tags
s.feed(html)
File "/base/python_runtime/python_dist/lib/python2.5/HTMLParser.py", line 107, in feed
self.rawdata = self.rawdata + data
AttributeError: MLStripper instance has no attribute 'rawdata'
这是 MLStripper:
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
set()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def strip_tags(html):
s = MLStripper()
s.feed(html)
return s.get_data()
MLStripper 直到昨天都工作正常。
这些是我的其他问题:
https://stackoverflow.com/questions/8152141/how-to-fix-this-attributeerror-with-htmlparser-py
https://stackoverflow.com/questions/8153300/how-to-fix-a-corrupted-pyshell-py
您发布的代码存在一两个问题(主要与正确初始化
HTMLParser
有关)。
尝试运行脚本的修改版本:
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
# initialize the base class
super(MLStripper, self).__init__()
def read(self, data):
# clear the current output before re-use
self._lines = []
# re-set the parser's state before re-use
self.reset()
self.feed(data)
return ''.join(self._lines)
def handle_data(self, d):
self._lines.append(d)
def strip_tags(html):
s = MLStripper()
return s.read(html)
html = """Python's <code>easy_install</code>
makes installing new packages extremely convenient.
However, as far as I can tell, it doesn't implement
the other common features of a dependency manager -
listing and removing installed packages."""
print(strip_tags(html))
如果您重写 HTMLParser 类中的重置方法,也会出现此错误。
在我的例子中,我为其他一些功能添加了一个名为 Reset 的方法,并发现虽然 Python 没有告诉你这样做有问题(也没有任何迹象表明我重写了任何东西),但它破坏了 HTMLParser 类。
您需要调用超类 HTMLParser 中的 init。
您也可以使用
class MLStripper(HTMLParser):
def __init__(self):
super(MLStripper, self).__init__()
set()
self.fed = []
我也有类似的问题,我的意思是原始数据的属性错误。
我一开始使用了以下语法,我认为这是正确的语法
class pdbResaHTMLParser(HTMLParser):
def __init__(self,booking: Booking):
super(HTMLParser, self).__init__()
theBooking = booking
最终结果是
AttributeError: 'pdbResaHTMLParser' object has no attribute 'rawdata'
稍后调用 feed 方法时。
阅读那篇文章后,我将代码更改为
,但没有真正的希望class pdbResaHTMLParser(HTMLParser):
def __init__(self,booking: Booking):
HTMLParser.__init__(self)
#super(HTMLParser, self).__init__()
theBooking = booking
然后就可以了。
这让我很困惑,我认为我们正在执行的两种语法相同,但看起来并非如此。
如果有人可以解释一下为什么这是≠