From 204896e479b04d2e8bc283b40f91f5a74a2fd19c Mon Sep 17 00:00:00 2001 From: Matthew Zeitlin Date: Thu, 22 Apr 2021 17:27:26 -0400 Subject: [PATCH 1/2] BUG: read_csv/table raising when sys.setprofile used --- doc/source/whatsnew/v1.3.0.rst | 1 + pandas/io/parsers/readers.py | 6 ++++-- .../tests/io/parser/common/test_common_basic.py | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/source/whatsnew/v1.3.0.rst b/doc/source/whatsnew/v1.3.0.rst index 0e567972e7823..f1f0f222f37ad 100644 --- a/doc/source/whatsnew/v1.3.0.rst +++ b/doc/source/whatsnew/v1.3.0.rst @@ -796,6 +796,7 @@ I/O - Bug in :func:`read_excel` dropping empty values from single-column spreadsheets (:issue:`39808`) - Bug in :meth:`DataFrame.to_string` misplacing the truncation column when ``index=False`` (:issue:`40907`) - Bug in :func:`read_orc` always raising ``AttributeError`` (:issue:`40918`) +- Bug in :func:`read_csv` and :func:`read_table` misinterpreting arguments when ``sys.setprofile`` had been previously called (:issue:`41069`) Period ^^^^^^ diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index 796d44dc7877a..55e3e14a0969d 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -540,7 +540,8 @@ def read_csv( float_precision=None, storage_options: StorageOptions = None, ): - kwds = locals() + # locals() should never be modified + kwds = locals().copy() del kwds["filepath_or_buffer"] del kwds["sep"] @@ -620,7 +621,8 @@ def read_table( memory_map=False, float_precision=None, ): - kwds = locals() + # locals() should never be modified + kwds = locals().copy() del kwds["filepath_or_buffer"] del kwds["sep"] diff --git a/pandas/tests/io/parser/common/test_common_basic.py b/pandas/tests/io/parser/common/test_common_basic.py index 572bc09c96886..0ed48b5edf2b1 100644 --- a/pandas/tests/io/parser/common/test_common_basic.py +++ b/pandas/tests/io/parser/common/test_common_basic.py @@ -6,6 +6,7 @@ from inspect import signature from io import StringIO import os +import sys from pathlib import Path import numpy as np @@ -631,6 +632,20 @@ def test_read_table_equivalency_to_read_csv(all_parsers): tm.assert_frame_equal(result, expected) +@pytest.mark.parametrize("read_func", ["read_csv", "read_table"]) +def test_read_csv_and_table_sys_setprofile(all_parsers, read_func): + # GH#41069 + parser = all_parsers + data = "a b\n0 1" + + sys.setprofile(lambda *a, **k: None) + result = getattr(parser, read_func)(StringIO(data)) + sys.setprofile(None) + + expected = DataFrame({"a b": ["0 1"]}) + tm.assert_frame_equal(result, expected) + + def test_first_row_bom(all_parsers): # see gh-26545 parser = all_parsers From 8c2bef3bf22839195144b532b53190bbfaffceb6 Mon Sep 17 00:00:00 2001 From: Matthew Zeitlin Date: Thu, 22 Apr 2021 17:30:25 -0400 Subject: [PATCH 2/2] isort fixup --- pandas/tests/io/parser/common/test_common_basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/io/parser/common/test_common_basic.py b/pandas/tests/io/parser/common/test_common_basic.py index 0ed48b5edf2b1..fe68597d11f0b 100644 --- a/pandas/tests/io/parser/common/test_common_basic.py +++ b/pandas/tests/io/parser/common/test_common_basic.py @@ -6,8 +6,8 @@ from inspect import signature from io import StringIO import os -import sys from pathlib import Path +import sys import numpy as np import pytest