函数完成的Python修饰符

2024-04-19 01:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能开发一个decorator来确定一个函数是否在没有崩溃的情况下成功完成?类似于下面的decorator,但它必须检测函数是否成功运行。你知道吗

def functionStartDecorator():
    print("Function has started")
    def decoratorWrapper(functionToBeDecorated):
        def wrapper(*args, **kwargs):
            #Todo log function has run
            return functionToBeDecorated(*args, **kwargs)
        return wrapper
    return decoratorWrapper  

Tags: 函数returndef情况argsfunctiondecoratorwrapper
2条回答

正如在注释中所说的,最简单的方法是将函数包装为try/except。如果您的函数不返回任何内容,只是通过副作用进行操作,那么让修饰函数返回该函数的运行状态应该很简单:

def tryfn(f):
    def decorated(*args, **kwargs):
        try:
            f(*args, **kwargs)
            return 'Ran successfully'
        except Exception as e:
            return 'Error: {}'.format(e)
    return decorated

然后可以调整decorned的确切返回类型:可能返回布尔值,可能将函数的状态附加到f的返回,可能记录事情。。。核心原则可能仍然围绕着修饰函数中的try/except。例如,如果要同时返回返回值(如果失败,则返回None)和是否成功:

def tryfn(f):
    def decorated(*args, **kwargs):
        try:
            res = f(*args, **kwargs)
            return True, res
        except:
            return False, None
    return decorated

请注意,在本例中,您正在丢失有关确切错误的信息,因此您可能希望扩展返回以包括成功、失败、错误等。。。这就变成了方便性和完整性之间的权衡,这取决于你的具体问题。你知道吗

我做了这样的事。你看到这个代码有什么问题吗?你知道吗

def functionStartDecorator():
    def decoratorWrapper(functionToBeDecorated):
        def wrapper(*args, **kwargs):
            try:
                print("Function has started")
                result=functionToBeDecorated(*args, **kwargs)
                print("Function has complete")
                return result
            except:
                print ("Function failed")
        return wrapper
    return decoratorWrapper  

@functionStartDecorator()
def simplefunc():
    return "somthing"

相关问题 更多 >