Databricks中调用Notebook函数出现NameError问题求助
问题解决:Databricks循环调用Notebook后无法找到函数
问题原因
dbutils.notebook.run()会启动独立的执行进程运行目标Notebook,该进程的上下文与当前Notebook完全隔离——即便执行成功,目标Notebook里定义的函数、变量也不会同步到当前Notebook的会话中。而手动在不同代码块单独执行时,本质是用%run魔法命令在当前会话上下文里加载目标Notebook代码,所以函数能正常调用。
解决方案
放弃dbutils.notebook.run(),改用%run命令动态导入目标Notebook,确保函数加载到当前会话。由于%run是魔法命令,无法直接在Python循环中执行,可通过exec()实现循环导入:
functions_notebooks = ["../functions/other_functions", "../functions/general_functions"] for notebook in functions_notebooks: exec(f'%run {notebook}') # 现在可正常调用函数 variable1, variable2, variable3 = function1_other_functions()
补充说明
%run是Databricks专属魔法命令,作用是在当前会话中执行指定Notebook的全部代码,等价于把目标Notebook的代码直接复制到当前代码块执行,因此所有定义的函数、变量都会在当前会话生效。- 如果目标Notebook需要传递参数,可在
%run后追加参数,例如%run ../functions/other_functions $param1=value1。
内容的提问来源于stack exchange,提问作者Gerlex
相关产品推荐
相关产品推荐

