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)
如果不查看更多代码(特别是 dh
和 ph
的代码)很难判断,但我猜 pg
是从其中一个调用的函数,或代码中的其他函数。
函数 pg
在任何非 possible_choice
情况下递归调用自身(因为只有 q
returns 直接)——也就是说,在 return pg(wl)
线。
您描述的情况表明 ph
和 dh
中的一个或两个正在再次调用 pg
。
这意味着对于每个非 q
的输入,您都会在堆栈中收到来自 ph
(或 ph
和 dh
) 和 一个来自对 pg
的递归调用。这将导致您描述的确切行为,其中一个 q
不足以退出。使用您发布的代码 - 即没有 dh
和 ph
- 无法准确知道,但这是合乎逻辑的结论。
如果您想要立即退出的可能性,则在 q
的情况下,您必须使用带有 break
的简单无限循环而不是递归。
另一种可能性是遵循@PauloScardine 使用 exit()
的想法,如果你真的想要退出整个过程。同样,对于您发布的代码,无法知道这是否可行(pg
直接从 main
函数调用)。
在我的程序中,我想与用户互动并要求他按下特定的字母来做一些事情(我认为这个游戏的逻辑与我的问题无关)。当我开始游戏并作为第一个字母时,我按 '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)
如果不查看更多代码(特别是 dh
和 ph
的代码)很难判断,但我猜 pg
是从其中一个调用的函数,或代码中的其他函数。
函数 pg
在任何非 possible_choice
情况下递归调用自身(因为只有 q
returns 直接)——也就是说,在 return pg(wl)
线。
您描述的情况表明 ph
和 dh
中的一个或两个正在再次调用 pg
。
这意味着对于每个非 q
的输入,您都会在堆栈中收到来自 ph
(或 ph
和 dh
) 和 一个来自对 pg
的递归调用。这将导致您描述的确切行为,其中一个 q
不足以退出。使用您发布的代码 - 即没有 dh
和 ph
- 无法准确知道,但这是合乎逻辑的结论。
如果您想要立即退出的可能性,则在 q
的情况下,您必须使用带有 break
的简单无限循环而不是递归。
另一种可能性是遵循@PauloScardine 使用 exit()
的想法,如果你真的想要退出整个过程。同样,对于您发布的代码,无法知道这是否可行(pg
直接从 main
函数调用)。