首页 > 解决方案 > 如何以编程方式确保函数包含 return 语句?

问题描述

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

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

def bananer():
    b = "banana"
    return b

我可以解析函数的实际代码字符串以获得包含"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}")
>>> validate_funk(appler)
#triggers ValueError

>>> validate_funk(bananer)
# passes

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

标签: pythonfunction

解决方案


你真正关心的可能不是 return 语句本身,而是函数返回某种类型的东西。这可以通过使用类型提示 (PEP 484)轻松完成:

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

def bananer() -> str:
    b = "banana"
    return b

现在,运行像 mypy 或 Pyre(或许多其他工具)这样的静态分析工具:将发出有关函数返回类型错误的警告appler(预期str,得到NoneType)。

寻找 sabik 的答案以获得更一般的答案。编写(单元)测试是另一种很好的做法,它可以捕获更多问题,并且如果做得好的话,是对代码可维护性的投资。


推荐阅读