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()
正在被代码后面某个地方的另一个定义覆盖,该定义没有打印
。找出实际情况的方法是在调试器中运行代码。