2017-05-26 75 views
1

我运行一个脚本到ipython(1.2.1),我需要它停止,如果不符合某些条件。我试图使用exit()语句,但它的行为并不像预期的那样。ipython:退出()语句不按预期工作

就拿下面的脚本我把它叫做test.py

if(True): 
    print('Error') 
    exit() 
print('Still here!') 

当我运行它使用python test.py,我得到:

$python test.py 
Error 

然后执行结束,符合市场预期。

但是,如果我从IPython中使用run -i test.py运行它,然后我得到:

In [1]: run -i test.py 
Error 
Still here! 

最后IPython中的执行被终止。问题在于,在这种情况下,第二个打印语句仍然执行,而遇到exit()语句时我需要执行脚本。

为什么会发生这种情况,我如何获得我想要的结果? (我正在运行python 2.7.6)

+1

'进口SYS的; sys.exit(0)' –

+3

我不知道ipython,但给'sys.exit()'一试。当然如果你还没有这样做,你还需要'import sys'。简单的'exit()'函数有点奇怪:它被设计为在标准Python交互式解释器中使用的方便,但在其他上下文中使用它通常不是一个好主意。 –

+0

更新到ipython 5 –

回答

2

exit()单独是为了REPL,并非真的意味着脚本使用。

尝试使用sys.exit(0)后您import sys,当然

+0

在交互式Ipython会话中,REPL捕获'sys.exit'。在测试'argparse'的例子时,我总是依赖这一点。 – hpaulj