gpt4 book ai didi

python - 搜索python文件中的所有if条件并在下一行添加打印语句

转载 作者:行者123 更新时间:2023-12-01 07:40:01 25 4
gpt4 key购买 nike

我必须编辑一个 python 文件,以便在每个 if 条件之后,我需要添加一行内容

if condition_check:
if self.debug == 1: print "COVERAGE CONDITION #8.3 True (condition_check)"
#some other code
else:
if self.debug == 1: print "COVERAGE CONDITION #8.4 False (condition_check)"
#some other code

数字 8.4(一般为 y.x)指的是这个 if 条件在函数 8(y) 中(这些函数只是顺序数字,8 没有什么特别的),并且 x 是第 y 个函数中的第 x 个 if 条件。

当然,要添加的行必须添加适当的缩进。 condition_check 是正在检查的条件。

例如:

if (self.order_in_cb):
self.ccu_process_crossing_buffer_order()

变成:

if (self.order_in_cb):
if self.debug == 1: print "COVERAGE CONDITION #8.2 TRUE (self.order_in_cb)"
self.ccu_process_crossing_buffer_order()

我如何实现这个目标?

额外背景:我有大约 1200 行 python 代码,大约有 180 个 if 条件 - 我需要查看在执行 47 个测试用例期间是否满足每个 if 条件。换句话说,我需要进行代码覆盖率。复杂的是 - 我正在使用 cocotb 刺激进行 RTL 验证。因此,没有直接的方法来驱动刺激,因此我没有看到使用标准coverage.py 方法来测试覆盖率的简单方法。有没有办法以其他方式检查覆盖范围?我觉得我错过了一些东西。

最佳答案

如果你确实不能使用coverage.py,那么我会编写一个辅助函数,使用inspect.stack来查找调用者,然后使用linecache来读取源代码行,并以这种方式记录。然后,您只需在整个文件中将 if Something: 更改为 if condition(something):,这应该相当容易。

这是一个概念证明:

import inspect
import linecache
import re

debug = True

def condition(label, cond):
if debug:
caller = inspect.stack()[1]
line = linecache.getline(caller.filename, caller.lineno)
condcode = re.search(r"if condition\(.*?,(.*)\):", line).group(1)
print("CONDITION {}: {}".format(label, condcode))
return cond


x = 1
y = 1
if condition(1.1, x + y == 2):
print("it's two!")

打印:

CONDITION 1.1:  x + y == 2
it's two!

关于python - 搜索python文件中的所有if条件并在下一行添加打印语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com