是否可以从函数调用的子函数中退出函数


我的问题很简单。这是一个概念:
from random import randrange, uniform
def match (x, y):
if x == y:
print("True!")
else:
print("False")
return
def main():
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
main()

正如您所看到的,有两个功能。在随机整数中循环直到它们匹配的main(),和将实际整数传递到其中以便进行计算的match(),以及如果遇到错误结果,两个循环都应该中断。此代码有两个问题:

  1. 循环永远不会中断,因为返回只适用于运行代码的函数。我的目标是在返回错误结果时停止主函数
  2. 可以在每行上添加if语句,以检查返回的False结果。然而,这将是非常低效的,而且根本不理想。一定有更好的办法

我应该注意,这是我根据实际代码中的一个问题建模的代码,这个问题很长,没有上下文就无法复制粘贴到这里。同样的原理仍然适用:就像这里的代码一样,当主函数调用的子函数计算出错误的结果时,我必须停止它的进一步计算。

我该怎么做?我的想法是以某种方式从子函数match()中停止主函数,但这可能吗?如果没有,我有什么选择?

from random import randrange, uniform
def match (x, y):
if x == y:
print("True!")
else:
print("False")
raise Exception()
def main():
try:
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
while True:
match(randrange(0, 10), randrange(0, 10))
except:
print("exit")
main()

这可能不是你想要的答案,但我想这可能会有所帮助。

通过使用try-and-except创建一个包含所有while循环的范围,您可以通过引发异常退出该函数。

如果您想完全结束函数(不在函数中执行try/except(,您可以简单地执行以下操作:

try:
main()
except:
#something else

这也允许您在不修改函数本身的情况下执行此操作。

最新更新