如何以编程方式确保函数包含 return 语句?

Has*_*tax 5 python function

如何验证函数是否包含return关键字?我经常忘记返回行,所以我担心我的包的用户在提供基于函数的输入时也会忘记。

def appler():
    a = "apple"
    # `return` is missing

def bananer():
    b = "banana"
    return b
Run Code Online (Sandbox Code Playgroud)

我可以为最后一行解析函数的实际代码字符串,其中包含"return"但不是很健壮(它可能由注释触发)。

def validate_funk(funk):
    if condition_to_check_that_it_contains_rtrn:
        pass
    else:
        raise ValueError(f"Yikes - The function you provided not contain a `return` statement:\n\n{funk}")
Run Code Online (Sandbox Code Playgroud)
>>> validate_funk(appler)
#triggers ValueError

>>> validate_funk(bananer)
# passes
Run Code Online (Sandbox Code Playgroud)

编辑:理想情况下不运行该功能。

Bla*_*der 3

没有return语句的函数None默认返回。

>>> def abc():
    pass
>>> print(abc())
None
>>> 
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令添加支票:

def validate_func(function):
    if function() == None:
        raise ValueError("Yikes - Does not contain a `return` statement")
Run Code Online (Sandbox Code Playgroud)

但也有一些缺点。

  1. 你必须执行该函数
  2. 如果你在一个函数中,它return不会None工作

不太实用,但是的,这是一种方法。您还可以获取本地函数列表类中的方法列表并循环遍历它们,而无需单独检查每个函数。