python 没有正确退出程序

python does not exit program properly

在我的程序中,我想与用户互动并要求他按下特定的字母来做一些事情(我认为这个游戏的逻辑与我的问题无关)。当我开始游戏并作为第一个字母时,我按 'q' 程序立即退出,但是当我玩了一会儿(使用几次 'g' 和 'r')我必须按几次 'q' 在我退出程序之前也是如此(每次我收到与游戏开始时相同的提示 "Enter g to start ... ") 我正在使用 Canopy 和 Python 2.7.

t_h = '' 
def pg(wl):

    global t_h
    result = raw_input("Enter g to start new game, r to replay last game, or q to end game: ")
    possible_choices = ["g", "r", "q"]
    if result in possible_choices:
        if result == 'g':
            t_h = dh(n)
            ph(t_h, wl, n)
        if result == 'r':
            if t_h == '':
                print 'You have not played a game yet. Please play a new game first!'
            else:
                ph(t_h, wl, n)
        if result == 'q':
            return None
    else:
        print "Invalid letter." 
    return pg(wl)

如果不查看更多代码(特别是 dhph 的代码)很难判断,但我猜 pg 是从其中一个调用的函数,或代码中的其他函数。

函数 pg 在任何非 possible_choice 情况下递归调用自身(因为只有 q returns 直接)——也就是说,在 return pg(wl) 线。

您描述的情况表明 phdh 中的一个或两个正在再次调用 pg。 这意味着对于每个非 q 的输入,您都会在堆栈中收到来自 ph(或 phdh 一个来自对 pg 的递归调用。这将导致您描述的确切行为,其中一个 q 不足以退出。使用您发布的代码 - 即没有 dhph - 无法准确知道,但这是合乎逻辑的结论。

如果您想要立即退出的可能性,则在 q 的情况下,您必须使用带有 break 的简单无限循环而不是递归。 另一种可能性是遵循@PauloScardine 使用 exit() 的想法,如果你真的想要退出整个过程。同样,对于您发布的代码,无法知道这是否可行(pg 直接从 main 函数调用)。