python的execfile()变量范围问题

时间:2016-01-14 01:34:37

标签: python

我有一堆python脚本我从父python脚本调用但是我使用在父python脚本中调用的脚本的变量时遇到了麻烦。场景示例:

parent.py

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
execfile('./parser.py')
print(experimentID) #I was hoping 0426 will be printed to screen but I am getting an error: global name 'experimentID' is not defined 

./parser.py

fileNameOnly  = (eventFileName).split('/')[-1]
experimentID  = fileNameOnly.split('_')[0]

有什么建议吗? (以上只是我正在处理的案例的一个例子)

1 个答案:

答案 0 :(得分:2)

简而言之,您无法在execfile()中设置/修改本地变量 - 来自execfile() docs

  

注意默认的locals的行为与下面的函数locals()相同:不应尝试修改默认的locals字典。如果需要在函数execfile()返回后查看代码对locals的影响,则传递显式的locals字典。 execfile()不能可靠地用于修改函数的本地。

有关更全面的答案,请参阅this

如果您确实要设置全局变量,可以使用this answer中所述的显式全局参数调用execfile()

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
execfile('./b.py', globals())
print experimentID

如果您真的想要在parent.py中设置 local 的变量,那么您可以明确地将本地字典传递给execfile()

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
local_dict = locals()
execfile('./b.py', globals(), local_dict)
print(local_dict["experimentID"])
相关问题