我想编写一个函数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())
非常感谢提前
答案 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