How to make a function inside another function quit both functions at once?
我正在制作一个程序,它向用户询问一些问题,并使用不同的函数对用户输入的内容做出反应。我需要这样做,如果用户输入"cancel",它不仅会结束他们当前所在的函数,甚至会结束调用先前函数的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def func1(x): func2(x+5) print 5 def func2(x): func3(x+5) print 5 def func3(x): print x return func1(20) print 10 # 30 # 5 # 5 # 10 |
所以目前这将打印30,退出func3,打印5,退出func2,打印5,退出func1。我需要一种方法让它在func3打印30后停止。有什么想法吗?
所以期望的输出是。
1 2 | #30 #10 |
号
编辑:这是一个非常简化的版本,他们不会在这个特定的代码中输入cancel。它将在一个
提升
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def func1(x): try: func2(x+5) print 5 except: pass def func2(x): func3(x+5) print 5 def func3(x): print x raise("Foo") # user's input should drive this. return func1(20) print 10 |
以正常方式到达
如果不想更改函数的内容,可以使用下面的修饰器。还有评论中提到的修正。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class UserAbort(Exception): pass def swallow(f): def wrapper(*args): try: f(*args) except UserAbort: pass return wrapper @swallow def func1(x): func2(x+5) print 5 def func2(x): func3(x+5) print 5 def func3(x): print x raise UserAbort # user's input should drive this. return func1(20) print 10 |
号