【发布时间】:2020-09-03 07:35:42
【问题描述】:
def foo():
while <condition>:
do something
def bar():
for i in range(5):
do something
假设我在上面的文件名test.py 中定义了两个函数。 python中有没有办法编写具有以下行为的函数?
import test
def uses_while(fn: Callable) -> bool:
(what goes here?)
>>> uses_while(test.foo)
True
>>> uses_while(test.bar)
False
我基本上需要以编程方式检查函数是否使用了 while 循环,而无需手动检查代码。我曾想过使用 pdb.getsourcelines(),但是如果里面有 cmets 或带有单词“while”的字符串,那将不起作用。有什么想法吗?
【问题讨论】:
-
我认为您可以过滤掉在
for或while之前包含任何非空白字符的任何源代码行,尽管挑战在于如何处理多行字符串. -
为什么要这样做?你能提供一些背景信息吗?
-
是的,谢谢!我为 while 循环搜索了很长时间,但我没有想到要搜索 for 循环。
-
@Chris_Rands,是的,这是因为我正在构建一些测试来标记学生提交的内容,他们需要使用 while 循环作为标准的一部分。
-
@HHC 小心,因为他们可以添加
while True: break并使用 for 循环,它会通过你的测试。
标签: python python-3.x unit-testing automated-tests bytecode