如何从函数内部终止脚本?
我刚开始学习Python,想知道有没有办法在一个函数里面结束整个脚本?
我举个具体的例子,我用一个函数来当文本游戏的主菜单。我在代码开始的时候调用这个函数,然后后面是实际的游戏代码。我希望能有一种方法从主菜单结束脚本。我听说过:
import sys
sys.exit()
但是因为我在一个函数里面使用这个方法,而脚本外面还有其他代码要执行,所以它并没有立刻停止,而是继续执行其他部分的代码。有没有办法让脚本自动结束,不管它在哪里?即使我需要制造一个错误来停止程序,只要能让用户看不到这个错误,我也可以接受。
提前感谢任何帮助!
2 个回答
0
sys.exit应该是从主线程强制退出的方式,不过你可以通过一个没有指定异常的try/except来绕过这个限制。一个常见的替代方法是把主线程放在一个try/except中,专门处理键盘中断和/或系统退出。
比如说
>>> try:
... # some risky thing
... except:
... # Dah! catching all exceptions including SystemExit and KeyboardInterrupt
...
这样可以防止在“某些风险”中调用系统退出时真的退出(因为现在这个情况被except处理了,就像except:/pass一样)。
更好的做法是
>>> def main():
... try:
... riskybehavior()
... except SystemExit, KeyboardInterrupt:
... userExit()
...
>>> def riskybehavior():
... try:
... myrisk()
... except TypeError as te:
... print str(te)
...
这里的TypeError是你从myRisk中预期得到的错误。至少,
except Exception as e:
因为SystemExit和KeyboardInterrupt并不是Exception的子类。
0
你可以直接抛出一个异常,然后在你想要返回的地方捕获这个异常。
比如说:
class HaltException(Exception):
pass
def internal_code():
#some code
if exit_condition:
raise HaltException("We decided we want to halt the script")
def main_entry():
try:
#call actual code
internal_code()
#Catch exception (to avoid error message)
except HaltException:
#And exit cleanly
return
注意:你可以使用 "except KeyboardInterrupt:" 来捕获键盘中断(在Windows上是按Ctrl+C)。