python控制台中的sys.exit

python控制台中的sys.exit,python,ipython,spyder,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") 如果know程序know在else循环中跳转,它将崩溃并给出错误消息。如果我使用IPython,一切都很好,但

嗨,我在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")
如果know程序know在else循环中跳转,它将崩溃并给出错误消息。如果我使用IPython,一切都很好,但是如果我使用Python控制台,控制台会冻结,我必须重新启动它,这有点不方便

我在MAC上使用Python2.7和Spyder

有没有一种变通方法可以让我在Python和IPython中以同样的方式工作?这是spyder的问题吗


感谢您的帮助

您需要导入系统。以下是我的作品:

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")

不确定这是您应该使用的系统。退出。这个函数基本上只是抛出一个特殊的异常(
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)为什么要退出控制台?这只有在执行类似于
$python myprog.py
的程序时才有意义。如果使用sys.exit(1),同样的情况也会发生,但消息已经消失。我在一个计算复杂相位并将其添加到数据的函数中使用它。如果现在选择的方法不在列表中,则程序将崩溃,以防止使用非相位数据进行进一步计算。因此,最好停止这一点,并给用户(或我自己)一个提示我导入sys的原因是什么。代码是有效的。但是Python控制台的性能并不好啊抱歉我误解了这个问题@沙丘下面的答案在我看来是非常好的。这很有效。我曾希望代码中的更改不那么严重,但如果我认为我将采用此更改,那么如果您将代码与REPL一起使用,则不需要while循环。代码将以异常退出,将打印堆栈跟踪(包括您的消息),然后REPL将提示您执行下一个命令。这是一个非常好的示例。非常感谢