python控制台中的sys.exit

时间:2016-02-18 11:29:27

标签: python ipython spyder

您好我在python控制台中使用sys.exit时遇到了麻烦。它对ipython非常有用。我的代码大致如下:

if name == "lin":
    do stuff
elif name == "static":
    do other stuff
else:
    sys.exit("error in input argument name, Unknown name")

如果知道程序知道在else循环中跳转它就会崩溃并给我错误信息。如果我使用IPython,一切都很好,但如果我使用Python控制台,控制台会冻结,我必须重新启动它,这有点不方便。

我在MAC上使用带有Spyder的Python 2.7。

是否有一种解决方法,以便我的代码在Python和IPython中以相同的方式工作?这是一个spyder问题吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

不确定这是您应该使用sys.exit的内容。这个函数基本上抛出了一个特殊的异常(SystemExit),它没有被python REPL捕获。基本上它退出python,你回到终端shell。 ipython的REPL 抓住SystemExit。它显示消息,然后返回REPL。

不要使用sys.exit,而应该执行以下操作:

def do_something(name):
    if name == "lin":
        print("do stuff")
    elif name == "static":
        print("do other stuff")
    else:
        raise ValueError("Unknown name: {}".format(name))

while True:
    name = raw_input("enter a name: ")
    try:
        do_something(name)
    except ValueError as e:
        print("There was a problem with your input.")
        print(e)
    else:
        print("success")
        break # exit loop

答案 1 :(得分:0)

您需要导入sys。以下适用于我:

import sys
name="dave"
if name == "lin":
    print "do stuff"
elif name == "static":
    print "do other stuff"
else:
    sys.exit("error in input argument name, Unknown name")