首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python coverage.py exclude_lines

Python coverage.py exclude_lines
EN

Stack Overflow用户
提问于 2014-11-21 15:30:26
回答 2查看 7.3K关注 0票数 5

背景

我有几个使用coverage.py的Django项目,并且一直试图向我的.coveragerc配置文件的exclude_lines部分添加一些额外的表达式。问题是,即使使用适当的正则表达式在测试人员(如http://www.pythonregex.comhttp://www.regexr.com )中提取行,也不会导致报告中忽略行。

我已经查看了文档,并在存储库中搜索了一下,但是一直未能找到任何理由来解释为什么我的配置可能不起作用。从文档中可以看出,我的配置与他们所描述的完全一样。

我还尝试使用姜戈-鼻子 Version1.2,这是最后一次PyPI发行版,它将允许异常注入,但没有效果,它似乎在计算Django视图和Django REST API端点的覆盖率方面存在一些问题,至少在1.7版中是这样。

我试过的

我的配置如下:

代码语言:javascript
运行
复制
[run]
branch = True
omit =
    */tests*
    */migrations/*
    *__init__.py*
    */settings/*
    *wsgi.py*
    *admin.py*

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    pragma: no cover
    def __repr__
    if self.debug:
    raise AssertionError
    raise NotImplementedError
    (.*)except Exception as e:(.*)
    if 0:
    if __name__ == .__main__.:

我还在配置的report部分尝试了以下异常处理组合:

代码语言:javascript
运行
复制
(.*)except Exception as e:
except Exception as e:
except Exception as e:(.*)

下面是一个函数的例子,它包含了我期望被忽略的部分代码:

代码语言:javascript
运行
复制
def my_func():
    try:
        # Some logic
        return True
    except Exception as e:
        return defensive_exception(my_func.__name__, e, False)

在上面的示例中,基于文档,我希望忽略except Exception as e:下的所有内容,或者至少忽略except Exception as e行本身。然而,情况似乎并非如此。如果有人对我的配置有什么问题或者我需要做什么不同的事情有一些洞察力,我将非常感谢帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 18:01:50

你不需要匹配整条线,所以没有必要在最后点星。这应该是可行的:

代码语言:javascript
运行
复制
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    pragma: no cover
    def __repr__
    if self.debug:
    raise AssertionError
    raise NotImplementedError
    except Exception as e:

:这种编码风格让我非常担心。当你这样做的时候捕捉普通的异常是不好的风格,并且可以隐藏问题。那么,您似乎并不关心该代码是否经过测试!

如果您需要对大量这样的函数执行强异常处理,那么您可能希望编写一个函数装饰符来包装函数调用。这将减少代码行数,并集中您的逻辑。然后,您也可以在一个地方处理覆盖问题。

票数 5
EN

Stack Overflow用户

发布于 2014-11-21 16:09:01

我一直做的就是使用pragma: no cover来实现您已经在exclude_lines中拥有的功能。

代码语言:javascript
运行
复制
def my_func():
    try:
        # Some logic
        return True
    except Exception as e:  # pragma: no cover
        return defensive_exception(my_func.__name__, e, False)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27064807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档