Как исправить это AttributeError? - PullRequest
12 голосов
/ 16 ноября 2011

Вчера я установил пакет 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

Ответы [ 3 ]

25 голосов
/ 16 ноября 2011

Существует одна или две проблемы с кодом, который вы разместили (в основном, для правильной инициализации HTMLParser).

Попробуйте запустить исправленную версию вашего скрипта:

from HTMLParser import HTMLParser

class MLStripper(HTMLParser):
    def __init__(self):
        # initialize the base class
        HTMLParser.__init__(self)

    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)
1 голос
/ 24 мая 2016

Эта ошибка также появляется, если вы переопределяете метод reset в классе HTMLParser.

В моем случае я добавил метод с именем reset для некоторых других функций и обнаружил, что хотя Python не сообщает вам о проблемеделая это (и не было никаких признаков того, что я что-то переопределял), он нарушает класс HTMLParser.

0 голосов
/ 12 июля 2019

Вам нужно вызвать init в суперклассе HTMLParser.

Вы также можете сделать это, используя

class MLStripper(HTMLParser):
    def __init__(self):
        super(MLStripper, self).__init__()
        set()
        self.fed = []
...