首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python的execfile()变量范围问题

python的execfile()变量范围问题
EN

Stack Overflow用户
提问于 2016-01-14 01:34:37
回答 1查看 3.6K关注 0票数 1

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

parent.py

代码语言:javascript
复制
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

代码语言:javascript
复制
fileNameOnly  = (eventFileName).split('/')[-1]
experimentID  = fileNameOnly.split('_')[0]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 10:33:43

简单地说,您不能只在execfile()中设置/修改局部变量--从execfile()文档

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

要获得更全面的答案,请参见

如果确实希望设置全局变量,可以使用显式globals参数调用execfile(),如这个答案中所述。

代码语言:javascript
复制
eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
execfile('./b.py', globals())
print experimentID

如果您真的希望设置一个在parent.py中是本地的变量,那么您可以显式地将一个局部变量字典传递给execfile()

代码语言:javascript
复制
eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv'
local_dict = locals()
execfile('./b.py', globals(), local_dict)
print(local_dict["experimentID"])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34780235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档