2017-12-27 113 views
-2

我已经排除了os.exit,sys.exit(),raise SystemExit(0),quitexit()一旦某件事情完成,我该如何完全停止代码?

我想完全停止,一旦我的多个条件都满足了。

while x: 
    #do something 
    #for loop 
    #if a: 
     #do something 
     print "Game over" 
     os.exit 
    #elif b: 
     #do something 
     print "Game over" 
     os.exit 
    break 

while y: 
    #(...same form as the previous one^) 

#get user input for the next turn 

#while 1 
#... 
#while n 

当我玩游戏,而游戏在消息被打印到屏幕上,它仍然是用户输入尽管被告知停止问。

+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune

+1

如果使用'else if','while'循环将在'elif'内,这种情况下会自动中断。 – Onyambu

+0

为什么不能使用'sys.exit()'? –

回答

1

这是怎么sys.exit()应该工作。如果您导入并达到它,Sys.exit()应该可以工作。也许更多的故障排除信息会有帮助?这适用于Python和python3

#!/usr/bin/env python 

import sys 

while 1==1: 
    print("This will print") 

    if 2==2: 
     print("This will also print") 
     sys.exit() 

    print("This will not print") 
print("This will not print") 

这是我的终端输出:

Matts-MacBook-Pro:Desktop mw$ ./stupid.py 
This will print 
This will also print 

编辑。

正如@goosfraba所说,sys.exit(0)可能是最佳实践。提供的The link表示没有参数可以有未定义的行为。像1或“这是一个错误信息”的另一个参数也会起作用。

+0

解决!谢谢。顺便说一下,不错的文件名。 – user7091717

0

有了这些小改动,我设法使这项工作:

import os 

while True: 
    #do something 
    #for loop 
    if False: 
     #do something 
     print "Game over A" 
     os._exit(0) 
    elif True: 
     #do something 
     print "Game over B" 
     os._exit(0) 
    break 

print "Not over" 

输出:

Game over B 

注缺乏不高于输出。 或许你需要_exit(<status>)

+0

虽然技术上有效,但常规的“sys.exit”也应该如此。有'os._exit'的合法用途,但在这里使用它似乎是一个坏主意。 – user2357112

+0

很抱歉,我知道有人投下我的回应,因为它与你的相似。问题是我仍然在输入我的解决方案,但你已经发布了你的解决方案。但是,如果你看看上面的评论,我确实提到了“if else”语句的使用 – Onyambu

+0

如果您有与您的答案有关的评论,请将其发布到那里,而不是在这里。我不是那个倒票的人。 – Prune