Pytest tmpdir_factory 抛出了一个错误 “Expected binary or unicode string, got local”

我正在使用 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 通常是使用这个固定方法的方式。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注