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

IPython.embed()中生成器表达式引用全局变量失败问题问询

在IPython.embed()环境中生成器表达式引用全局变量的问题

问题现象

在IPython.embed()启动的交互式环境中,使用列表推导式(或生成器表达式)引用当前会话定义的变量时,会触发NameError,提示变量未定义。但相同代码在常规Python提示符下可正常运行。

复现步骤

  • 创建bug.py文件,写入代码:
    import IPython;IPython.embed()
    
  • 运行该文件进入IPython交互式环境
  • 依次执行以下代码:
    data = list(range(17))
    modulus = 3
    
  • 执行列表推导式:
    data1 = list([x for x in data if x % modulus == 0])
    
    此时会触发错误:NameError: name 'modulus' is not defined

问题原因

这是IPython的已知问题,其embed模式下的命名空间作用域处理存在异常,导致推导式无法正确识别当前会话中定义的变量。

临时解决方法

在执行推导式前,先运行以下命令,将当前局部变量同步到全局命名空间:

globals().update(locals())

之后再执行推导式即可正常访问变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:05:25