变量是未定义的错误。在python中的条件之外调用变量

时间:2019-06-07 01:16:26

标签: python

我正在解析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”未定义。

为什么会这样,我该如何解决。

2 个答案:

答案 0 :(得分:3)

这是因为您的变量LaunchPath是在函数startElement的范围内定义的,因为您在函数返回时在其中声明了它,同时也会“擦除”该变量。

您应该阅读有关python scopes

的信息

答案 1 :(得分:0)

这是因为LaunchPath是一个局部变量,您正试图在其范围之外引用它。