Stata程序向Python函数传递local变量失败求修复与解释
Stata调用Python函数报错:NameError: name 'get_data' is not defined
修复后的代码
python clear capture program drop get_data program get_data version 17 args InputText // 从全局Python环境导入函数后调用 python: from __main__ import get_data; get_data() end python: from sfi import Macro def get_data(): inputtext = Macro.getLocal('InputText') print(inputtext) end local InputText "YYY" python: get_data() get_data "XXX"
原因解释
- 直接在Stata命令行执行
python: get_data()时,Python代码运行在全局Stata-Python会话环境,可以直接访问之前定义的get_data()函数。 - 但在Stata自定义程序内部执行
python: get_data()时,Stata会创建一个独立的局部Python执行上下文,这个上下文默认不会加载全局会话中定义的函数、变量,因此触发NameError。 - 通过
from __main__ import get_data,可以显式从全局Python模块(__main__)导入预先定义的函数,让局部上下文能够访问到它,从而正常执行。
可选修复方案(将Python函数嵌入Stata程序)
如果不想依赖全局Python函数,也可以把Python函数定义直接放到Stata程序内部,每次调用程序时会重新初始化该函数:
python clear capture program drop get_data program get_data version 17 args InputText python: from sfi import Macro def get_data(): inputtext = Macro.getLocal('InputText') print(inputtext) get_data() end end get_data "XXX"
内容的提问来源于stack exchange,提问作者dimitriy
相关产品推荐
相关产品推荐

