从函数内部终止脚本?

时间:2014-07-06 15:22:03

标签: python terminate

我是Python的绝对初学者,并且想知道是否有办法从函数内部终止整个脚本?

我的具体例子是我使用的功能就像文本游戏的主菜单一样。我在代码的开头调用函数,然后实际的游戏编码跟随它。我希望有一种方法可以从主菜单中结束脚本。我听说过:

import sys
sys.exit()

但是因为我在一个函数中使用它,并且脚本在函数外部执行的操作更多,所以它继续执行代码的其他部分,而不是立即停止。有没有办法自动关闭脚本,无论它在哪里?即使我必须以某种方式创建一个停止程序的错误,如果有一种方法可以隐藏用户的错误,我会很好。

提前感谢您的任何帮助!

2 个答案:

答案 0 :(得分:0)

sys.exit应该是主线程的硬退出,但是,您可以通过try /旁路来避开它,除非它没有指定它除外。一个常见的替代方法是将主线程放在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的子类

答案 1 :(得分: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

注意 - 你可以使用"除了KeyboardInterrupt:"捕获键盘中断(在Windows上按Ctrl + C)