我是Python的绝对初学者,并且想知道是否有办法从函数内部终止整个脚本?
我的具体例子是我使用的功能就像文本游戏的主菜单一样。我在代码的开头调用函数,然后实际的游戏编码跟随它。我希望有一种方法可以从主菜单中结束脚本。我听说过:
import sys
sys.exit()
但是因为我在一个函数中使用它,并且脚本在函数外部执行的操作更多,所以它继续执行代码的其他部分,而不是立即停止。有没有办法自动关闭脚本,无论它在哪里?即使我必须以某种方式创建一个停止程序的错误,如果有一种方法可以隐藏用户的错误,我会很好。
提前感谢您的任何帮助!
答案 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)