如何以 python 版本不可知的方式检查 http 状态代码?
How to check http status code in python version agnostic way?
我正在编写 python 代码,应该 运行 python 2.7 和 3.3+
我正在尝试找到一种方法来正确检查 http 状态代码并且不会降低我的测试覆盖率 %。
如果我这样写:
try:
import http.client as httpclient
except ImportError:
import urllib as httpclient
覆盖率永远不会是 100%
所以我的问题是:有更好的方法吗?
针对 Python 的多个版本时,您很少能达到 100% 的测试覆盖率。 Python 2 解释器将遵循一条执行路径,Python 3 解释器将遵循另一条执行路径,并且两个解释器都不会命中每一行代码。最好的解决方案是按照 Martijn 提到的那样做并使用 # pragma: no cover
。以下是我在我的一个项目中解决这个问题的方法:
from sys import version_info
if version_info.major == 2: # pragma: no cover
from httplib import ACCEPTED, NO_CONTENT # pylint:disable=import-error
else: # pragma: no cover
from http.client import ACCEPTED, NO_CONTENT # pylint:disable=import-error
上面的解决方案将满足coverage、flake8和pylint:
- 在每个条件的末尾放置
# pragma: no cover
注释可防止覆盖范围计算该行或后续块中的任何内容。
# pylint:
评论具有类似的目的。
- 在每个评论前放置两个空格会让 flake8 样式检查器满意。
我从 SatelliteQE/nailgun nailgun/entities.py
中提取了上面的代码。
我正在编写 python 代码,应该 运行 python 2.7 和 3.3+
我正在尝试找到一种方法来正确检查 http 状态代码并且不会降低我的测试覆盖率 %。
如果我这样写:
try:
import http.client as httpclient
except ImportError:
import urllib as httpclient
覆盖率永远不会是 100%
所以我的问题是:有更好的方法吗?
针对 Python 的多个版本时,您很少能达到 100% 的测试覆盖率。 Python 2 解释器将遵循一条执行路径,Python 3 解释器将遵循另一条执行路径,并且两个解释器都不会命中每一行代码。最好的解决方案是按照 Martijn 提到的那样做并使用 # pragma: no cover
。以下是我在我的一个项目中解决这个问题的方法:
from sys import version_info
if version_info.major == 2: # pragma: no cover
from httplib import ACCEPTED, NO_CONTENT # pylint:disable=import-error
else: # pragma: no cover
from http.client import ACCEPTED, NO_CONTENT # pylint:disable=import-error
上面的解决方案将满足coverage、flake8和pylint:
- 在每个条件的末尾放置
# pragma: no cover
注释可防止覆盖范围计算该行或后续块中的任何内容。 # pylint:
评论具有类似的目的。- 在每个评论前放置两个空格会让 flake8 样式检查器满意。
我从 SatelliteQE/nailgun nailgun/entities.py
中提取了上面的代码。