You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:36:23