我有一堆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]
有什么建议吗? (以上只是我正在处理的案例的一个例子)
答案 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"])