【问题标题】:Is there a method that tells my program to quit?有没有一种方法可以告诉我的程序退出?
【发布时间】:2010-05-12 23:22:40
【问题描述】:

对于我的程序菜单中的“q”(退出)选项,我有以下代码:

elif choice == "q":
    print()

直到我把它放入一个无限循环中,它一直打印空白行。有没有可以退出程序的方法?否则,你能想出另一种解决方案吗?

【问题讨论】:

  • 为了完整性,还应考虑CTRL-c(键盘中断)

标签: python exit quit


【解决方案1】:

一种方法是:

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 也可以单独工作(尽管不建议)。
  • @ChristopheD:我选择省略对异常的讨论,因为它们不应该用于正常的程序流程。
  • 异常在 Python 中并没有那么异常。
【解决方案2】:

结束程序的实际方法是调用

raise SystemExit

就是sys.exitdoes, anyway。

一个普通的SystemExit,或将None 作为单个参数,将进程的退出代码设置为零。任何非整数异常值 (raise SystemExit("some message")) 将异常值打印到 sys.stderr 并将退出代码设置为 1。整数值将进程的退出代码设置为该值:

$ python -c "raise SystemExit(4)"; echo $?
4

【讨论】:

    【解决方案3】:

    在 Python 3 中有一个 exit() 函数:

    elif choice == "q":
        exit()
    

    【讨论】:

    • 我在Built-in Functions 中没有看到那个——也许你在想sys 中的那个?
    • 我也没有看到它,但它似乎对我有用(Python 2.6)
    • 这实际上是解释器模式的让步——试试print(exit) 看看你会得到什么。 quit 类似。
    • exit() 和 quit() 似乎都在 IDLE 中退出了它。附言您如何将内容作为代码(即函数)放入 cmets?
    • exit()is added by the site package。文档说它不应该在程序中使用:$
    【解决方案4】:

    见sys.exit。该函数将以给定的退出状态退出您的程序。

    【讨论】:

      【解决方案5】:

      请注意,基于 sys.exit() 或任何 Exception 的解决方案可能无法在多线程环境中运行。

      由于exit()最终“只”引发异常,所以只有在主线程调用时才会退出进程,异常不会被拦截。 (doc)

      This answer from Alex Martelli了解更多详情。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        相关资源
        最近更新 更多