2016-12-01 24 views
0

我想编写一个功能terminate(),该功能根据用户输入停止当前程序。实际上,我有这方面的一些问题,有时它与包括sys.exit()在功能,有时不合作。有时quit()正在工作,有时不会。 '有时'意思是说,它取决于调用函数terminate()的哪个部分。原因是什么以及可以使用什么?如何在python 3.5的脚本中包含停止程序功能

我试图复制下面的另一个问题: func1()调用func2()为了接收一些输入变量。在func(2)的输入过程中,用户可以选择输入'stop'。在这种情况下,terminate()被调用并且程序应该退出。但事实并非如此。

在我看来,它首先跳回到func1(),然后终止,然后出现错误消息,结果是不可迭代的。我该如何防止跳回到func1()并停止已在terminate()中的程序?

import sys 

def func1(): 
    a, b = func2() 
    print('something's brewing and I don't know what it is.') 

def func2(): 
    check = 0 
    while check < 1: 
     x = input('your choice: ') 
     if x == 'stop': 
      terminate('stop') 
      break 
     else: 
      a = x 

     y = input('your choice: ') 
     if y == 'stop': 
      terminate('stop') 
     else: 
      b = y 
     check = 1 
    return a, b 

def terminate(stop): 
    if stop == 'stop': 
     sys.exit() 
     # or quit() 
    else: 
     return False 

print(func1()) 

提前

+0

你的程序有语法错误的'终止()'的第一行。如果你解决了这个问题,它仍然不会运行,因为你永远不会调用一个函数。请提供重现问题的代码,并在发布之前对其进行测试。 – zondo

+0

谢谢@zondo。我做了一些修改。正如我所描述的,问题有时候会出现,我不知道如何精确地复制它。希望我能得到一些输入的原因是什么。最令人惊叹的是事实上,sys.exit()在某种程度上取决于它的调用方式而有所不同。 –

回答

0

至于“跳回”非常感谢,我不能为您提供任何意见,但是,我可以提供一个清洁的解决方案,这使得使用Python的错误处理。

替代调用quit()sys.exit()

import sys 

# Declare a custom Exception which you can catch 
class ProcessTerminated(Exception): 
    pass 

def func1(): 
    a, b = func2() 
    print('something's brewing and I don't know what it is.') 

def func2(): 
    check = 0 
    while check < 1: 
     x = input('your choice: ') 
     if x == 'stop': 
      terminate('stop') 
      break 
     else: 
      a = x 

     y = input('your choice: ') 
     if y == 'stop': 
      terminate() 
     else: 
      b = y 
     check = 1 
    return a, b 

def terminate(stop): 
    raise ProcessTerminated() # Raise this and catch it in main 

if __name__ == '__main__': 
    try: 
     print(func1()) 
    except ProcessTerminated: 
     print("Process terminated successfully!")