python - 如何以编程方式确保函数包含 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
编辑:理想情况下不运行该功能。
解决方案
你真正关心的可能不是 return 语句本身,而是函数返回某种类型的东西。这可以通过使用类型提示 (PEP 484)轻松完成:
def appler() -> str:
a = "apple"
# `return` is missing
def bananer() -> str:
b = "banana"
return b
现在,运行像 mypy 或 Pyre(或许多其他工具)这样的静态分析工具:将发出有关函数返回类型错误的警告appler
(预期str
,得到NoneType
)。
寻找 sabik 的答案以获得更一般的答案。编写(单元)测试是另一种很好的做法,它可以捕获更多问题,并且如果做得好的话,是对代码可维护性的投资。
推荐阅读
- remote-debugging - stm32f429 buildroot 远程调试
- python - 如何在 python 中将连续的时间段组合在一起?
- php - 从 cURL 返回 jpeg
- python - 在 Python ftplib 中列出名称中带有 UTF-8 字符的文件
- css - 如何使用 css flexbox 布局日历而不让内容扩展框?
- java - Hibernate Criteria API Inner Join 中的不同结果
- python - 从 curl 到 pycurl - 如何制作多部分帖子 - 使用 curl,使用 pycurl 失败,出现 422
- sql - 如何在 SQL 中使用多个条件过滤行的子集?
- javascript - Puppeteer 不适用于 VPS (DigitalOcean)
- c++ - 尝试使用 set 函数时出现分段错误