Python 使用doctest有条件地跳过整个文件

Python 使用doctest有条件地跳过整个文件,python,pytest,doctest,tox,f-string,Python,Pytest,Doctest,Tox,F String,我编写了一个sphinx.rst文件,其中包含使用f字符串的doctest片段。我使用tox用几个版本的python测试我的项目和文档,pytest用pytest--doctest glob='*.rst'运行测试。我运行测试的一些python版本不支持f字符串(2.7和3.5)。我需要用旧的python版本跳过这个文件 代码块中的:skipif:和:pyversion:无效,使用时出现以下错误: UNEXPECTED EXCEPTION: SyntaxError('invalid syntax

我编写了一个sphinx
.rst
文件,其中包含使用f字符串的doctest片段。我使用tox用几个版本的python测试我的项目和文档,pytest用
pytest--doctest glob='*.rst'
运行测试。我运行测试的一些python版本不支持f字符串(2.7和3.5)。我需要用旧的python版本跳过这个文件

代码块中的
:skipif:
:pyversion:
无效,使用时出现以下错误:

UNEXPECTED EXCEPTION: SyntaxError('invalid syntax', (hello = "hello {foobar} world")'))
Traceback (most recent call last):

  File "/usr/lib64/python3.5/doctest.py", line 1321, in __run
    compileflags, 1), test.mytest)

  File "<doctest myfile.rst[1]>", line 1

    hello = "hello {foobar} world"
                                 ^
SyntaxError: invalid syntax
myfile.rst:26: UnexpectedException


如何防止整个文件被测试,甚至被解析,而不使用pytest显式忽略它?

唯一的方法是从测试中完全排除该文件。您既没有向我们展示代码,也没有向我们展示
tox.ini
,因此我们几乎无法提供帮助。我想简短地回答我的问题。我的tox配置是最通用的配置
[tox:tox]envlist=py27,py35,py36,py37,py38
For
{py27,py35}
从测试中排除该文件。您没有显示用于运行测试的命令。如果是,例如
pytest
使用
pytest--ignore=/path/to/test.py
。我对问题进行了更精确的编辑。用pytest显式忽略每个文件有点乏味,我更喜欢使用sphinx标记,如
:skipif:
:pyversion:
“我更喜欢使用sphinx标记,如:skipif:或:pyversion:”这是不可能的。要获得标记,必须首先解析文件。如果解析器引发了
SyntaxError
,那么故事就到此结束了。该文件被完全拒绝。没有语法,没有标记。
# setup.cfg
[tox:tox]
envlist=py27,py35,py36,py37,py38
# myfile.rst
>>> foobar = "foobar"
>>> hello = f"hello {foobar} world"