2011-11-16 42 views
9

Instalé un paquete de stripe ayer y ahora mi aplicación no se está ejecutando. Estoy tratando de entender dónde está el problema. ¿Tiene algo que ver con PyShell o HTLParser o algo más? He colgado con la etiqueta GAE así la esperanza de que la traza de los troncos puede dar una pista sobre el problema:¿Cómo solucionar este AttributeError?

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' 

Esta es 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 estaba trabajando bien hasta ayer.

Y estos son mis otras preguntas:

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

Respuesta

21

Hay uno o dos problemas con el código que envió (ver principalmente con la inicialización del HTMLParser adecuadamente).

intente ejecutar esta versión modificada de su script:

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) 
+0

Muchas gracias por la respuesta. Funciona muy bien. ¿Te importa agregar algunos comentarios al código para que lo entienda? Y también, ¿por qué crees que esto estuvo funcionando hasta ahora durante meses y de repente dejó de funcionar? Gracias de nuevo. – Zeynel

+1

@Zeynel. He agregado algunos comentarios para mostrar los principales cambios que realicé en el script original. En cuanto a por qué su script anterior dejó de funcionar: eso es muy difícil de decir sin saber qué ha cambiado recientemente en su sistema. Pero, en cualquier caso, creo que el script modificado es más correcto en general. – ekhumoro

+0

Genial. Gracias de nuevo. – Zeynel

1

Este error también aparece si se reemplaza el método de reinicio en la clase HTMLParser.

En mi caso, agregué un método llamado restablecer para alguna otra funcionalidad y descubrí que aunque Python no te dice que hay un problema al hacer esto (ni hubo ninguna indicación de que estuviera anulando nada), rompe el HTMLParser clase.

Cuestiones relacionadas