[英]python's execfile() variable scope issue
我有许多从父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]
有什么建议么? (以上只是我正在研究的案例的一个示例)
简而言之,您不能只在execfile()
设置/修改局部变量-来自execfile()docs :
注意:默认本地变量的行为与以下函数locals()的描述相同:不应尝试对默认本地变量字典进行修改。 如果需要在函数execfile()返回后查看代码对本地语言的影响,请传递一个明确的本地语言字典。 execfile()无法可靠地用于修改函数的本地变量。
有关更全面的答案,请参见this 。
如果您确实想设置全局变量,则可以使用此答案中所述的显式全局参数调用execfile()
:
eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
execfile('./b.py', globals())
print experimentID
如果您确实想在parent.py
设置本地变量,则可以将本地字典明确传递给execfile()
:
eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
local_dict = locals()
execfile('./b.py', globals(), local_dict)
print(local_dict["experimentID"])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.