IPython:exit()语句未按预期工作

10

我正在IPython(1.2.1)中运行一个脚本,如果某个条件不满足,我需要让它停止。我尝试使用exit()语句,但它的行为不符合预期。

以我称之为test.py的以下脚本为例:

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

当我使用 python test.py 运行它时,我得到以下结果:
$python test.py
Error

然后,执行按预期终止。

但是如果我使用 run -i test.py 在ipython中运行它,则会得到以下结果:

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

最后,ipython的执行被终止。问题是,在这种情况下,第二个打印语句仍然被执行,而我需要脚本的执行在遇到exit()语句时立即停止。 为什么会出现这种情况,我该如何获得我想要的结果?(我正在运行python 2.7.6)

3
导入sys模块;退出程序并返回0。 - OneCricketeer
4
我不了解ipython,但可以尝试使用 sys.exit()。当然,如果你还没有导入 sys,你也需要这样做。普通的 exit() 函数有点奇怪:它是为标准 Python 交互式解释器中的方便使用而设计的,但通常在其他情况下使用它并不是一个好主意。 - PM 2Ring
升级到 IPython 5 - Yasin Yousif
@cricket_007 它有效!但是为什么exit()不起作用呢?如果你把你的评论转化成答案并向我解释,我将很高兴接受它! - valerio
1个回答

10

exit() 只适用于 REPL,实际上并不适合在脚本中使用。

尝试在导入 sys 后使用 sys.exit(0)


在交互式的Ipython会话中,REPL捕获了sys.exit。当我测试argparse示例时,我一直依赖它。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接