You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在使用pyfakefs fixture的pytest测试中,如何让pandas.read_csv()使用C引擎?

问题:使用pyfakefs fixture时,pandas read_csv强制切换到Python引擎导致float_precision参数报错

我用pandas的read_csv()读取CSV内容,需要用到high或round_trip浮点精度。下面这段代码在Python REPL或者直接运行Python程序时完全正常:

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO('0.00042119645,3.4,8.8244e-5\r\n'), float_precision='round_trip')

把这段逻辑放到普通pytest测试里也能正常跑,但只要引入pyfakefs fixture就会失败——不管是否显式指定engine='c',pd.read_csv()都会强制使用Python引擎,抛出如下错误:

ValueError("The 'float_precision' option is not supported with the 'python' engine")

最简复现的测试代码如下:

import pandas as pd
from io import StringIO

def test_pandas_read_csv(
        #mocker,     # pytest-mock测试fixture,注释状态
        fs,         # pyfakefs测试fixture,启用即失败
        ):
    try :
        df = pd.read_csv(StringIO('0.00042119645,3.4,8.8244e-5\r\n'), float_precision='round_trip')
        assert True
    except Exception as exc:
        assert False

我写了更详细的参数化测试用例,同样只要保留fs参数就会失败,注释掉fs则所有测试通过:

import pytest

import pandas as pd
from io import StringIO

class Test_Pandas_Read_CSV :

    @pytest.mark.parametrize(
            'csv_str,kwargs,exp_status',
            [
                (
                    '0.00042119645,3.4,8.8244e-5\r\n',    # csv字符串
                    dict(                                   # 传入read_csv的参数
                        float_precision='round_trip',
                        # engine='c',
                    ),
                    True,                                   # 预期成功
                ),
                (
                    '0.00042119645,3.4,8.8244e-5\r\n',    # csv字符串
                    dict(                                   # 传入read_csv的参数
                        float_precision='round_trip',
                        engine='c',
                    ),
                    True,                                   # 预期成功
                ),
                (
                    '0.00042119645,3.4,8.8244e-5\r\n',    # csv字符串
                    dict(                                   # 传入read_csv的参数
                        float_precision='round_trip',
                        engine='python',
                    ),
                    False,                                  # 预期失败
                ),
            ]
        )
    def test_pandas_read_csv(
            self,
            # mocker,                                         # pytest-mock测试fixture,注释状态
            fs,                                             # pyfakefs测试fixture,启用即失败
            csv_str     : str,
            kwargs,
            exp_status  : bool,
        ) :

        try :
            df = pd.read_csv(StringIO(csv_str), **kwargs )
            status = True
        except Exception as exc:
            status = False

        assert status == exp_status

请问:在必须使用pyfakefs fixture的pytest测试中,怎么让pandas的read_csv()使用默认的C引擎?

内容的提问来源于stack exchange,提问作者user19007114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:40:21