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

2024-05-17 16:54:30 发布

您现在位置: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”未定义

为什么会发生这种情况,我如何解决它


Tags: nameselfanparserifdeftagxml
2条回答

这是因为您的变量LaunchPath是在函数startElement的作用域内定义的,因为当函数返回时您在那里声明了它,它也“擦除”了变量

你应该读一下python scopes

这是因为LaunchPath是一个局部变量,您试图将其引用到其范围之外

相关问题 更多 >