2011-11-16 23 views
9

Dün bir şerit paketi yükledim ve şimdi uygulamam çalışmıyor. Sorunun nerede olduğunu anlamaya çalışıyorum. PyShell veya HTLParser veya başka bir şey ile ilgisi var mı. Ben GAE'nin etiketi yanı günlüklerinden iz sorunla ilgili bir ipucu verebilir umuduyla ile ilanıyla:Bu AttributeError nasıl düzeltilir?

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' 

Bu MLStripper geçerli: MLStripper düne kadar gayet iyi çalışıyordu

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() 

.

Yayınladığınız koduyla bir ya da iki sorunu vardır

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

cevap

21

(çoğunlukla düzgün HTMLParser başlatılıyor ile ilgisi):

Ve bunlar benim diğer sorulardır.

Senaryonuzun bu tadil sürümünü çalıştıran deneyin: Eğer HTMLParser sınıfında sıfırlama yöntemini geçersiz eğer

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

Cevabınız için çok teşekkürler. Harika çalışıyor. Anlayabilmem için koda bazı yorumlar eklemeyi düşünüyor musunuz? Ve bunun neden şu an aylardır çalıştığını düşünüyorsunuz ve aniden çalışmayı bıraktınız. Tekrar teşekkürler. – Zeynel

+1

@Zeynel. Orijinal betiğinizde yaptığım ana değişiklikleri göstermek için birkaç yorum ekledim. Önceki komut dosyanızın neden çalıştığı konusunda: Sisteminizde son zamanlarda neler değiştiğini bilmeden söylemek çok zor. Ama her durumda, değiştirilmiş betiğin daha genel olarak doğru olduğunu düşünüyorum. – ekhumoro

+0

Harika. Tekrar teşekkürler. – Zeynel

1

Bu hata görünür.

Benim durumumda, başka bir işlevsellik için sıfırlama adında bir yöntem ekledim ve Python'un bunu yapmanın bir problemi olduğunu söylemediğini (ya da herhangi bir şeyi geçersiz kıldığımı gösteren herhangi bir işaret yoktu) keşfettiğimde, HTMLParser'ı bozdu. sınıf.

İlgili konular