在下面的代码中,编译器给出了在assingment之前引用的错误“Local variable shouldStoreData”。但我先分配它。有人能让我知道我的错误
class MyHTMLParser(HTMLParser):
shouldStoreData = False
textPartDoc = ""
def handle_starttag(self, tag, attrs):
print "Encountered a start tag:", tag
if(tag == "title" or tag == "body"):
shouldStoreData = True
def handle_endtag(self, tag):
print "Encountered an end tag :", tag
def handle_data(self, data):
#print "Data is",data
#print "valus of storeData is:",shouldStoreData
if(shouldStoreData == True):
textPartDoc = textPartDoc + " " + data
shouldStoreData = False
我在这里要做的是,我只想在标签是标题或正文中的任何标签时存储数据
答案 0 :(得分:7)
第一个shouldStoreData
是一个类属性。 handle_starttag
和handle_data
中的内容是局部变量。在handle_data
中,您在分配变量之前对其进行测试。除非您明确地将其作为类/实例属性(例如self.shouldStoreData
或MyHTMLParser.shouldStoreData
)访问,否则方法内的代码不知道class属性是否存在。
如果您希望shouldStoreData
成为实例属性,则需要编写__init__
方法并将其创建为实例属性:
def __init__(self):
self.shouldStoreData = False
然后在其他方法中将其称为self.shouldStoreData
。
您应该阅读the Python tutorial以掌握Python中的类,属性和方法的基础知识。
答案 1 :(得分:0)
一个简单的例子,使其更清晰:
x='outside'
class A:
x='inside'
def __init__(self):
print x #prints the global x
def func1(self):
x='changed' #changes the global x
print x,A.x #prints the global x and then the class's x
<强>输出:强>
>>> a=A()
outside
>>> a.func1()
changed inside
>>> A.x
'inside'
>>> x
'outside'