Python有没有办法从函数中间体返回而不显式返回?
这是我正在处理的代码的浓缩版本:Python有没有办法从函数中间体返回而不显式返回?,python,jupyter-notebook,Python,Jupyter Notebook,这是我正在处理的代码的浓缩版本: def main(): foo() print("Only this line will get printed") def foo(): bar() print("This line is never reached") main() 这个程序的输出是“只有这一行会被打印”,我不明白为什么。实际上,它的作用就像在调用bar()的那一行或后面有一个return语句 我唯一的猜测是bar()引发了一个异常,但我用一个空白的tr
def main():
foo()
print("Only this line will get printed")
def foo():
bar()
print("This line is never reached")
main()
这个程序的输出是“只有这一行会被打印”,我不明白为什么。实际上,它的作用就像在调用bar()
的那一行或后面有一个return语句
我唯一的猜测是bar()
引发了一个异常,但我用一个空白的try/catch
块包围了它,它什么都没有捕获
知道这里会发生什么吗
另外,这是在Jupyter笔记本中运行的。我可以想出几种方法,让一个程序具有这种行为,但所有这些方法似乎都不太可能。很难想象这种情况会发生,除非有人故意把它当作恶作剧,或者作为一个抽象难题/挑战的解决方案,比如“你能让一个程序做这个吗?” 调用
bar
肯定不会导致foo
立即返回。如果bar
引发异常,foo
将在打印前停止,但main
也会停止,因为它没有try
/除了块。使用sys.excepthook
可以做一些事情来设置a,这可以解释为什么bar
能够在没有看到堆栈跟踪的情况下停止foo
,但是异常处理程序不会导致main
在foo
停止的地方继续
好吧,这是我对这个难题的解决方案,我希望它不是你的程序实际在做的:
def bar():
#我们将更改“print”所指的函数
全球印刷
#保留对内置“打印”功能的引用
旧的印刷品
#定义一个忽略其参数的函数,然后恢复旧的“print”函数
def忽略一次打印:
全球印刷
打印=旧打印
#将“print”更改为我们刚才定义的函数
打印=忽略一次打印
与代码组合时,它会输出:
只有这一行会被打印出来
“NameError:bar未定义”高度依赖于bar()
的外观。我们可以;不能从这个示例代码中复制。(请参阅:)听起来代码正在调用sys.exit()
。请添加栏中包含的代码。如果没有bar
函数,那么这就是问题所在……我猜foo()
正在被代码后面某个地方的另一个定义覆盖,该定义没有打印。找出实际情况的方法是在调试器中运行代码。