Python 是否有可能使一个覆盖范围忽略此装饰器?

Python 是否有可能使一个覆盖范围忽略此装饰器?,python,code-coverage,Python,Code Coverage,我构建了一个简单的装饰器,希望它能使覆盖率忽略应用它的任何内容。从经验上看,它没有效果。我所知道的关闭代码块覆盖范围的唯一方法是#pragma:no cover-有没有办法将其转移到业务逻辑中 def deco(fn): return fn # pragma: no cover @deco def uncover_me(x): if x > 1: return 3 return 5 uncover_me(3) uncover_me(0) 在

我构建了一个简单的装饰器,希望它能使覆盖率忽略应用它的任何内容。从经验上看,它没有效果。我所知道的关闭代码块覆盖范围的唯一方法是
#pragma:no cover
-有没有办法将其转移到业务逻辑中

def deco(fn):
    return fn  # pragma: no cover

@deco
def uncover_me(x):
    if x > 1:
        return 3
    return 5


uncover_me(3)
uncover_me(0)

在.coveragerc文件中,可以指定将排除行的正则表达式(如中所述)

如果正则表达式与引入代码子句的行匹配,则整个子句被排除。排除装饰器将排除整个函数

这应该适合您:

# in .coveragerc
[report]
exclude_lines =
    @deco
    pragma: no cover
从文档中:

请注意,在配置文件中使用exclude_lines选项时,您将控制整个正则表达式列表,因此如果仍希望应用默认的“pragma:no cover”匹配,则需要重新指定该匹配


最终目标是什么?为什么您希望使用
@deco
而不是
#pragma:no cover
?也许是为了控制它-“如果函数名是
foo
,那么
#pragma:no cover
,但仅当用户配置了
bar=99
”我想把它附加到我们已经拥有的装饰器上。在3.7上,它在实践中似乎没有这样做。你能打开一个关于它的coverage.py问题,这样我们就可以处理细节了吗?一会儿就可以了