我正在使用 pytest
来测试将数据分割成训练集、验证集和测试集,用于机器学习问题。我使用 tmpdir_factory
创建临时文件,但它抛出了一个类似于 TypeError: Expected binary or unicode string, got local('/tmp/pytest/pytest-4/test_folder0/train.tfrecord')
的错误。以下是我的代码:
在 conftest.py
中:
DATA_FOLDER = 'test_folder'@pytest.fixture(scope="session")def train_dataset(tmpdir_factory): return tmpdir_factory.mktemp(DATA_FOLDER).join('train.tfrecord')@pytest.fixture(scope="session")def val_dataset(tmpdir_factory): return tmpdir_factory.mktemp(DATA_FOLDER).join('val.tfrecord')@pytest.fixture(scope="session")def test_dataset(tmpdir_factory): return tmpdir_factory.mktemp(DATA_FOLDER).join('test.tfrecord')
在测试文件中:
def test_split(train_dataset, val_dataset, test_dataset): # split_function 的参数指的是写入分割结果的路径 split_function(train_dataset, val_dataset, test_dataset) """继续使用断言函数"""
谁能帮帮我?谢谢
回答:
tmpdir_factory
固定方法返回一个 py.path.local 对象,它封装了一个路径(有点类似于 pathlib.Path
)。因此,这些方法调用可以链式操作路径,就像你在固定方法中使用 mktemp().join()
那样。要从结果中得到一个 str
路径,你必须明确地将 py.path.local
转换为 str
:
@pytest.fixture(scope="session")def train_dataset(tmpdir_factory): return str(tmpdir_factory.mktemp(DATA_FOLDER).join('train.tfrecord'))
由于你测试的函数不知道 py.path.local
,将 tmpdir_factory
创建的路径转换回 str
通常是使用这个固定方法的方式。