quit 函数在 try-except 块中不起作用

quit function does not work in try-except block

这是我想要 运行 在 try except 块中退出的函数..

def quit_function(quit):
     if(quit=="quit"):
        sys.exit(1)

当我输入正确的输入时它工作 function_one 但是当我写 "exit" 以退出程序时 quit_function 不起作用,除了部分工作所以输出是 "invalid input"..我该如何解决?

 while True:
    try:
        a=raw_input("Enter input :").lower()
        function_one(a)
        quit_function(a)
    except:
        print "invalid input"
    else:
        break

exit 引发了一个 SystemExit,它继承自 BaseException

您正在 except 街区赶上出口。尝试使 except 更具体,只捕获正常异常(而不是退出信号):

try:
   ...
except Exception:
   print "Invalid input"

更好的是,找出您需要捕获的实际特定类型的异常,并且只捕获它。

sys.exit 函数实际上引发了一个特殊的 SystemExit 异常,它将向上传播堆栈,执行 finally 块 try 语句,直到异常被捕获或到达栈顶。在后一种情况下,python 干净地退出,而不是打印回溯。为避免捕获 SystemExit 异常,请将裸 except 语句更改为 except Exception 或更具体的内容。或者,如果你真的需要在没有异常处理程序的情况下立即退出 运行,你可以使用 os._exit

我假设 当我写 "exit" 实际上意味着 当我写 "quit" 因为你函数查找字符串 "quit".

首先,因为你有一个通用的 except 块,你看不到实际的 Exception 是什么,所以我敢打赌 function_one("quit") 会抛出一个 Exception.您需要在 function_one().

之前处理 quit_function()

其次,sys.exit() 还会抛出一种特殊类型的异常,因此 except: 不会削减它。

按照这些思路应该可行:

while True:
    try:
        a=raw_input("Enter input :").lower()
        quit_function(a)
        function_one(a)
    except Exception:
        print "invalid input"
    else:
        break