【问题标题】:In python, accessing global variables of one file in another在python中,在另一个文件中访问一个文件的全局变量
【发布时间】:2014-06-26 07:13:25
【问题描述】:

我有两个 python 脚本,其中一个包含一个全局变量 globVar,我希望在另一个文件中使用它。文件结构如下:

File1.py

from File2 import *

globVar = []

def func1(a,b):
  globVar.append(range(a,b))
  printLast()

def main():
  for i in range(1,10):
    for j in range(1,5):
      func1(i,j)

if __name__=="__main__":
  main()

文件2.py

from File1 import globVar

def printLast():
  element = globVar[-1]
  print 'Latest element is ',element

不要'打扰代码的生产力,这只是一个示例手头的问题。

在运行脚本 File1.py 时,会弹出一个错误,即 globVar[-1] 是 list index out of range。或者简单地说,列表为空。

为什么会这样?

编辑:

正如最初发布的那样,这个问题包含 “from File2 import printLast” 作为 File1.py 的第一行。但正如 @user2357112 在 cmets 中指出的那样,该语法导致 ImportError。

现在它已更改为 from File2 import *,错误是 IndexError,我一开始就试图指出。

任何合理的解释将不胜感激。

【问题讨论】:

  • 因为,您只是导入 globVar 变量,而不是初始化它。如果你想使用初始化的 globVar 那么你应该在 File2.py 文件中运行 main() 函数
  • 除了语法错误和拼写错误的函数名称(lastPrint 而不是printLast)之外,此代码还有一个循环导入问题,会导致ImportError 在IndexError 可能出现之前. When you post code to show your problem, please actually run what you post to verify that it correctly shows the problem.
  • @user2357112 更正。对不起,菜鸟的错误。虽然我相信这个示例代码会模拟我的问题的要点,但事实并非如此。以后会处理这些事情的。
  • @user2357112 另一件事。当我将 from File2 import printLast 更改为 from File2 import * 时,错误已更改为 IndexError 而不是最初的 Import Error。

标签: python


【解决方案1】:

这是因为直接从python执行的主模块File1.py比较特殊,导入的时候实际上是第二次创建的,所以有2个globVars。见:http://python-notes.curiousefficiency.org/en/latest/python_concepts/import_traps.html#executing-the-main-module-twice

【讨论】:

    【解决方案2】:

    如果您在最后删除 File1.py 中的 if 语句,这将正常工作。像这样:

    File1.py

    globVar = []
    
    def func1(a,b):
        globVar.append(range(a,b)
        printLast()
    
    def main():
        for i in range(1,10):
            for j in range(1,5):
                func1(i,j)
    
    globVar = main()
    

    这将确保 globVar 将具有值数组。

    【讨论】:

    • main 中没有返回任何内容
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2010-12-30
    • 2015-12-28
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多