<bdo id='gnrkm'></bdo><ul id='gnrkm'></ul>

  • <small id='gnrkm'></small><noframes id='gnrkm'>

    <i id='gnrkm'><tr id='gnrkm'><dt id='gnrkm'><q id='gnrkm'><span id='gnrkm'><b id='gnrkm'><form id='gnrkm'><ins id='gnrkm'></ins><ul id='gnrkm'></ul><sub id='gnrkm'></sub></form><legend id='gnrkm'></legend><bdo id='gnrkm'><pre id='gnrkm'><center id='gnrkm'></center></pre></bdo></b><th id='gnrkm'></th></span></q></dt></tr></i><div id='gnrkm'><tfoot id='gnrkm'></tfoot><dl id='gnrkm'><fieldset id='gnrkm'></fieldset></dl></div>
  • <legend id='gnrkm'><style id='gnrkm'><dir id='gnrkm'><q id='gnrkm'></q></dir></style></legend>

    1. <tfoot id='gnrkm'></tfoot>

      1. NameError 在 python 中使用 execfile

        时间:2023-09-10
        <tfoot id='cQPkG'></tfoot>
        <i id='cQPkG'><tr id='cQPkG'><dt id='cQPkG'><q id='cQPkG'><span id='cQPkG'><b id='cQPkG'><form id='cQPkG'><ins id='cQPkG'></ins><ul id='cQPkG'></ul><sub id='cQPkG'></sub></form><legend id='cQPkG'></legend><bdo id='cQPkG'><pre id='cQPkG'><center id='cQPkG'></center></pre></bdo></b><th id='cQPkG'></th></span></q></dt></tr></i><div id='cQPkG'><tfoot id='cQPkG'></tfoot><dl id='cQPkG'><fieldset id='cQPkG'></fieldset></dl></div>
                <tbody id='cQPkG'></tbody>

            1. <legend id='cQPkG'><style id='cQPkG'><dir id='cQPkG'><q id='cQPkG'></q></dir></style></legend>
                <bdo id='cQPkG'></bdo><ul id='cQPkG'></ul>

                  <small id='cQPkG'></small><noframes id='cQPkG'>

                  本文介绍了NameError 在 python 中使用 execfile的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我的应用程序有一个使用 execfile 动态执行 python 脚本的按钮.如果我在脚本中定义一个函数(例如.spam())并尝试在另一个函数中使用该函数(例如.eggs()),我会收到此错误:

                  My application has a button to execute a python script dynamically using execfile. If I define a function inside the script (eg. spam()) and try to use that function inside another function (eg. eggs()), I get this error:

                  NameError: global name 'spam' is not defined
                  

                  eggs() 中调用 spam() 函数的正确方法是什么?

                  What is the correct way to call the spam() function from within eggs()?

                  #mainprogram.py
                  class mainprogram():
                      def runme(self):
                          execfile("myscript.py")
                  
                  >>> this = mainprogram()
                  >>> this.runme()
                  
                  # myscript.py
                  def spam():
                      print "spam"
                  
                  def eggs():
                      spam()
                  
                  eggs()
                  

                  另外,我似乎无法从脚本中的主应用程序执行方法.即

                  Also, I can't seem to be able to execute a method from my main application in the script. i.e.

                  #mainprogram.py
                  class mainprogram():
                      def on_cmdRunScript_mouseClick( self, event ):
                          execfile("my2ndscript.py")
                      def bleh():
                          print "bleh"
                  
                   #my2ndscript.py
                   bleh()
                  

                  错误是:

                  NameError: name 'bleh' is not defined
                  

                  my2ndscript.py 调用 bleh() 的正确方法是什么?

                  What is the correct way to call bleh() from my2ndscript.py?

                  编辑:更新第一期

                  推荐答案

                  第二种情况你需要import(不确定是否mainprogram.py"在你的 $PYTHONPATH)

                  In the second case you will need import (not sure whether "mainprogram.py" is on your $PYTHONPATH)

                  #mainprogram.py
                  class mainprogram:
                      def runme(self):
                          execfile("my2ndscript.py")
                      def bleh(self):
                          print "bleh"
                  if __name__ == '__main__':
                      mainprogram().runme()
                  
                  #my2ndscript.py
                  import mainprogram
                  x = mainprogram.mainprogram()
                  x.bleh()
                  

                  但这将创建 mainprogram 的第二个实例.或者,更好的是:

                  but this will create a second instance of mainprogram. Or, better yet:

                  #mainprogram.py
                  class mainprogram:
                      def runme(self):
                          execfile("my2ndscript.py", globals={'this': self})
                      def bleh(self):
                          print "bleh"
                  if __name__ == '__main__':
                      mainprogram().runme()
                  
                  #my2ndscript.py
                  this.bleh()
                  

                  我想 execfile 无论如何都不是解决您问题的正确方法.为什么不使用 import__import__ (以及 reload() 以防脚本在这些点击之间发生变化)?

                  I guess that execfile is not the right solution for your problem anyway. Why don't you use import or __import__ (and reload() in case the script changes between those clicks)?

                  #mainprogram.py
                  import my2ndscript
                  
                  class mainprogram:
                      def runme(self):
                          reload(my2ndscript)
                          my2ndscript.main(self)
                      def bleh(self):
                          print "bleh"
                  
                  if __name__ == '__main__':
                      mainprogram().runme()
                  
                  #my2ndscript.py
                  def main(program):
                      program.bleh()
                  

                  这篇关于NameError 在 python 中使用 execfile的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:为什么 tkinter 模块在通过命令行运行时会引发属 下一篇:RDFLib:XML 序列化中的命名空间前缀

                  相关文章

                  最新文章

                  1. <i id='z6jtm'><tr id='z6jtm'><dt id='z6jtm'><q id='z6jtm'><span id='z6jtm'><b id='z6jtm'><form id='z6jtm'><ins id='z6jtm'></ins><ul id='z6jtm'></ul><sub id='z6jtm'></sub></form><legend id='z6jtm'></legend><bdo id='z6jtm'><pre id='z6jtm'><center id='z6jtm'></center></pre></bdo></b><th id='z6jtm'></th></span></q></dt></tr></i><div id='z6jtm'><tfoot id='z6jtm'></tfoot><dl id='z6jtm'><fieldset id='z6jtm'></fieldset></dl></div>
                    1. <small id='z6jtm'></small><noframes id='z6jtm'>

                      <legend id='z6jtm'><style id='z6jtm'><dir id='z6jtm'><q id='z6jtm'></q></dir></style></legend>
                    2. <tfoot id='z6jtm'></tfoot>

                      • <bdo id='z6jtm'></bdo><ul id='z6jtm'></ul>