我正在运行python cli工具Papermill。我正在运行jupyter笔记本,并且希望能够在笔记本运行时检测assertionErrors。当我从bash脚本运行papermill时,即使笔记本中存在python错误,我也总是得到0退出代码。
我发现了一些检测退出代码的方法,这些方法都有效,但是python错误并未抛出任何代码
例如:在我的nbTest.sh中,我正在运行笔记本并寻找错误
papermill python_notebooks/testing/$d python_notebooks/testing/results/$d.results.ipynb || True
if [ $? -eq 0 ]
then
echo "Successfully executed script"
else
# Redirect stdout from echo command to stderr.
echo "Script exited with error."
fi
done
作为输出,我得到:
.
.
.
Input Notebook: python_notebooks/testing/paperTest.ipynb
Output Notebook: python_notebooks/testing/results/paperTest.ipynb.results.ipynb
83%|████████▎ | 5/6 [00:00<00:00, 1.97it/s]
Traceback (most recent call last):
...
---------------------------------------------------------------------------
Exception encountered at "In [5]":
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-5-d941c6663321> in <module>()
----> 1 assert passed == False
AssertionError:
Successfully executed script
我希望退出代码为1,但无法处理python故障
答案 0 :(得分:0)
Jupyter和Papermill组合的优点之一是错误被保存在笔记本中以及错误发生的位置。一次运行多个ETL作业时,这非常有用。如果您还想访问笔记本之外的错误,我将从errors.txt
内部将特定错误写到try catch
文件中。然后,您可以通过读取错误来结束脚本。
讨论了各种错误记录技术in this post。