我想用IPython运行一个python脚本,并能够判断该脚本是成功的(一直运行)还是不成功(引发了一个异常)。在
通常,可以通过检查命令的返回值来判断命令是否成功,其中对于成功的约定是0,对于错误的约定是其他整数(指示错误的值)。这是使用python script.py运行脚本时的行为,但使用ipython script.py时,IPython会自动捕获错误并(毫无帮助地)返回退出代码0。在
在使用IPython运行脚本时,如何禁用此行为?在
顺便说一下,我需要用IPython而不是Python运行脚本,因为脚本是从IPython笔记本(.ipynb)生成的,并且包含一些IPython魔术命令。在
下面是一个最小的工作示例。在
失败.py#! /usr/bin/env python
mytext = 'Hello World!'
if __name__=="__main__":
print(missing_variable)
使用IPython运行脚本时,异常被打印到stdout,返回值为1,正确地表示脚本失败。在
^{pr2}$
使用IPython运行脚本时,会捕获异常并将回溯打印到stdout,然后IPython退出并返回0(这是不可取的,因为脚本没有成功)。在~$ ipython fail.py
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
~/fail.py in ()
2 mytext = 'Hello World!'
3 if __name__=="__main__":
----> 4 print(missing_variable)
NameError: name 'missing_variable' is not defined
~$ echo $?
0