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

Python中__init__嵌套函数用eval触发NameError的原因咨询

问题原因解析
  • 直接调用close_game()时,click作为__init__内部的嵌套函数,能通过Python的闭包机制,访问到外层__init__作用域里定义的close_game函数,所以能正常执行。
  • 使用eval("close_game()")时,问题出在eval的作用域查找规则:
    • eval默认会优先从当前调用它的函数(也就是click)的局部作用域里查找变量,但close_game并不在click的局部作用域中——它是__init__作用域的变量,属于闭包捕获的变量,不会被纳入click的局部作用域字典。
    • eval不会去闭包的捕获变量集合里查找名字,所以找不到close_game,就抛出了NameError。

如果想让eval正常执行,可以手动把__init__的局部作用域传给它,修改代码如下:

eval("close_game()", locals())

内容的提问来源于stack exchange,提问作者Lesolas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:20:51