【发布时间】:2010-05-12 23:22:40
【问题描述】:
对于我的程序菜单中的“q”(退出)选项,我有以下代码:
elif choice == "q":
print()
直到我把它放入一个无限循环中,它一直打印空白行。有没有可以退出程序的方法?否则,你能想出另一种解决方案吗?
【问题讨论】:
-
为了完整性,还应考虑CTRL-c(键盘中断)
对于我的程序菜单中的“q”(退出)选项,我有以下代码:
elif choice == "q":
print()
直到我把它放入一个无限循环中,它一直打印空白行。有没有可以退出程序的方法?否则,你能想出另一种解决方案吗?
【问题讨论】:
一种方法是:
sys.exit(0)
您当然必须import sys。
另一种方法是 break 退出无限循环。例如,您可以这样做:
while True:
choice = get_input()
if choice == "a":
# do something
elif choice == "q":
break
另一种方法是将主循环放在一个函数中,并使用return:
def run():
while True:
choice = get_input()
if choice == "a":
# do something
elif choice == "q":
return
if __name__ == "__main__":
run()
使用return 时需要run() 函数的唯一原因是(与其他一些语言不同)您不能直接从Python 代码的主要部分(不在函数内部的部分)中直接return )。
【讨论】:
raise SystemExit 也可以单独工作(尽管不建议)。
结束程序的实际方法是调用
raise SystemExit
就是sys.exitdoes, anyway。
一个普通的SystemExit,或将None 作为单个参数,将进程的退出代码设置为零。任何非整数异常值 (raise SystemExit("some message")) 将异常值打印到 sys.stderr 并将退出代码设置为 1。整数值将进程的退出代码设置为该值:
$ python -c "raise SystemExit(4)"; echo $?
4
【讨论】:
在 Python 3 中有一个 exit() 函数:
elif choice == "q":
exit()
【讨论】:
sys 中的那个?
print(exit) 看看你会得到什么。 quit 类似。
exit()is added by the site package。文档说它不应该在程序中使用:$
见sys.exit。该函数将以给定的退出状态退出您的程序。
【讨论】:
请注意,基于 sys.exit() 或任何 Exception 的解决方案可能无法在多线程环境中运行。
由于exit()最终“只”引发异常,所以只有在主线程调用时才会退出进程,异常不会被拦截。 (doc)
【讨论】: