如何在父Notebook中获取并使用子Notebook返回的exit信息?
在父Notebook中获取子Notebook的返回错误信息
dbutils.notebook.run() 方法的返回值就是子Notebook通过 dbutils.notebook.exit() 输出的内容,你可以直接接收该返回值,再根据约定的格式判断并处理错误信息。如果子Notebook出现未捕获的异常,父Notebook可通过异常捕获获取详情。
1. 子Notebook主动返回错误信息
子Notebook中捕获异常后,通过 dbutils.notebook.exit() 返回格式化的错误内容:
# 子Notebook代码 try: # 模拟执行失败逻辑 raise ValueError("输入数据为空") except Exception as e: # 返回带标识的错误信息 dbutils.notebook.exit(f"ERROR: {str(e)}")
父Notebook接收返回值并判断处理:
# 父Notebook代码 child_notebook_path = "/Workspace/路径/到/子Notebook" timeout = 3600 # 获取子Notebook返回结果 return_msg = dbutils.notebook.run(child_notebook_path, timeout) # 根据约定的前缀判断是否为错误 if return_msg.startswith("ERROR:"): print(f"子Notebook执行失败:{return_msg}") # 可根据需求抛出异常、记录日志或执行后续处理 raise Exception(return_msg) else: print("子Notebook执行完成,返回结果:", return_msg)
2. 捕获子Notebook的未处理异常
如果子Notebook未主动处理异常,父Notebook可通过try-except捕获执行过程中的异常:
# 父Notebook代码 child_notebook_path = "/Workspace/路径/到/子Notebook" timeout = 3600 try: return_msg = dbutils.notebook.run(child_notebook_path, timeout) print("子Notebook执行成功:", return_msg) except Exception as e: error_detail = str(e) print(f"子Notebook执行失败,异常信息:{error_detail}") # 这里可添加日志记录、告警等逻辑
关键提示
- 可以约定更复杂的返回格式(如JSON字符串),方便父Notebook解析错误码、错误详情等多维度信息
dbutils.notebook.run()的超时时间需根据子Notebook的实际执行时长合理设置- 若子Notebook执行超时,
run()会直接抛出超时异常,同样可通过try-except捕获处理
内容的提问来源于stack exchange,提问作者AMN
相关产品推荐
相关产品推荐

