我正在解析xml数据,当我在条件内打印变量时,但是稍后我再调用该变量时,则未定义。为什么会发生
在此,变量“ LaunchPath正常工作:
import xml.sax
class PathHandler( xml.sax.ContentHandler ):
def __init__(self):
self.CurrentData = ""
# Call when an element starts
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "application":
LaunchApp = attributes["android:name"].replace(".", "/")
LaunchPath = LaunchApp + ".smali"
print LaunchPath
if ( __name__ == "__main__"):
# create an XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# override the default ContextHandler
Handler = PathHandler()
parser.setContentHandler( Handler )
parser.parse("AndroidManifest.xml")
但是当我尝试像这样在底部打印“ LaunchPath”时,它不起作用:
import xml.sax
class PathHandler( xml.sax.ContentHandler ):
def __init__(self):
self.CurrentData = ""
# Call when an element starts
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "application":
LaunchApp = attributes["android:name"].replace(".", "/")
LaunchPath = LaunchApp + ".smali"
if ( __name__ == "__main__"):
# create an XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# override the default ContextHandler
Handler = PathHandler()
parser.setContentHandler( Handler )
parser.parse("AndroidManifest.xml")
print LaunchPath
这给我一个错误,提示“ LaunchPath”未定义。
为什么会这样,我该如何解决。
答案 0 :(得分:3)
这是因为您的变量LaunchPath是在函数startElement
的范围内定义的,因为您在函数返回时在其中声明了它,同时也会“擦除”该变量。
您应该阅读有关python scopes
的信息答案 1 :(得分:0)
这是因为LaunchPath
是一个局部变量,您正试图在其范围之外引用它。