如何在python 3.5

时间:2016-12-01 11:37:49

标签: function python-3.x exit

我想编写一个函数terminate(),根据用户输入停止当前程序。实际上我遇到了一些问题,有时它会在函数中包含sys.exit(),有时则不然。有时quit()正在运作,有时则不行。 '有时'意味着,它取决于函数terminate()被调用的程序的哪个部分。可能是什么原因以及可以使用什么?

我试图复制下面的另一个问题: func1()调用func2()以接收一些输入变量。在func(2)的输入过程中,用户可以选择输入“停止”。在这种情况下,调用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())

非常感谢提前

1 个答案:

答案 0 :(得分:0)

至于“跳回”,我不能给你任何建议,但是,我可以提供一个更清晰的解决方案,利用Python的错误处理。

调用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!") 的替代方法:

CREATE VIEW History_Report as
SELECT 
        H.TimeStamp,
        COALESCE(C.ClientName, CO.ClientName) ClientName,
        Q.InstanceName,
        O.Path,
        H.Details
from 
    History H
    left join Instance Q ON (H.InstanceID = Q.InstanceID)
    left join Object O on (H.ObjectID = O.ObjectID)
    left join Client C on (H.ClientID = C.ClientID)
    LEFT JOIN Client CO ON (O.ClientID = CO.ClientID)
GO