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

如何在Jupyter Notebook中获取同文件内其他单元格代码并通过exec()执行?

获取Jupyter Notebook同文件内其他单元格代码的方法

Jupyter的Python内核无法直接访问前端的单元格信息,确实需要结合JavaScript实现,但可以直接在Python单元格里调用JS完成,不用单独编写独立的JS脚本。

方法1:获取上一个单元格代码并执行

直接运行以下代码,就能拿到上一个单元格的代码字符串,后续可通过exec()执行:

from IPython.display import display, JavaScript

# 执行JS获取上一个单元格代码,传回Python变量
display(JavaScript("""
var current_idx = Jupyter.notebook.get_selected_index();
var prev_cell = Jupyter.notebook.get_cell(current_idx - 1);
var prev_code = prev_cell.get_text();
IPython.notebook.kernel.execute(`prev_cell_code = """ + repr(prev_code) + """`);
"""))

# 输出并执行代码
print(prev_cell_code)
exec(prev_cell_code)

关键逻辑说明

  • Jupyter.notebook.get_selected_index():获取当前选中单元格的索引值
  • get_cell(index):根据索引获取对应单元格对象,get_text()提取单元格内的文本内容
  • IPython.notebook.kernel.execute():将JS中拿到的代码字符串传递给Python内核,存入变量

方法2:封装成通用函数

如果需要频繁获取任意单元格的代码,可以封装成函数:

from IPython.display import display, JavaScript

def get_cell_code(cell_index):
    display(JavaScript(f"""
    var cell = Jupyter.notebook.get_cell({cell_index});
    var code = cell.get_text();
    IPython.notebook.kernel.execute(`target_cell_code = """ + repr(code) + """`);
    """))
    return globals()['target_cell_code']

# 获取当前单元格索引,再获取上一个单元格代码
current_idx = get_ipython().user_ns['_ii']
prev_code = get_cell_code(current_idx - 1)

exec(prev_code)

额外注意事项

  • 如果目标单元格是Markdown类型,get_text()会返回Markdown文本,执行前可通过cell.cell_type === 'code'判断类型,避免执行非代码内容
  • 修改cell_index参数,可获取任意位置的单元格代码,比如get_cell_code(0)获取第一个单元格的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:04