我可以更改python return语句的行为吗?

我该如何破解Python的return语句,以使其完成将一些检查数据发送到我正在编写的日志记录模块的额外工作?

到目前为止,我在每个return语句之前添加了一个称为owl()的函数。

owl()
return (something)

我希望我可以暂时将工作潜入return语句中。然后,我可以关闭并重新设置此返回调整,也许还可以获得一些访问权限,以查看返回的内容。

iCMS 回答:我可以更改python return语句的行为吗?

将函数主体包装在try/finally块中:

def func(...)
    try:
        ...
    finally:
        owl()

finally:代码始终在离开该块时执行,因此只要函数返回,它将执行。

为避免每次都必须编写此代码,可以使用装饰器。

def with_owl(func):
    def inner(*args,**kwargs):
        try:
            return func(*args,**kwargs):
        finally:
            owl()

@with_owl
def func(...):
    ...
,

定义上下文管理器。

from contextlib import contextmanager

@contextmanager
def with_owl():
    yield
    owl()

然后

def foo():
    with with_owl():
        ...

owl()会在出于任何原因退出with语句之前被调用,原因是 ,无论是到达正文末尾还是由于{{1 }}语句或异常。 (如果只想在“正常”返回上调用return,则上下文管理器可以显式检查是否引发了异常。)

基本上,owl()yield语句之前的所有内容都会在输入with_owl语句后立即执行,并且在您离开with语句之前,您将返回{{ 1}},然后执行with之后的内容。

本文链接:https://www.f2er.com/1921926.html

大家都在问