diff --git a/pandas/core/config_init.py b/pandas/core/config_init.py index f594232f5fb6d..83e5f890ff3c7 100644 --- a/pandas/core/config_init.py +++ b/pandas/core/config_init.py @@ -10,6 +10,7 @@ """ import os +from typing import Callable import warnings import pandas._config.config as cf @@ -879,7 +880,7 @@ def register_converter_cb(key): "format.formatter", None, styler_formatter, - validator=is_instance_factory([type(None), dict, callable, str]), + validator=is_instance_factory([type(None), dict, Callable, str]), ) cf.register_option("html.mathjax", True, styler_mathjax, validator=is_bool) diff --git a/pandas/tests/io/formats/style/test_format.py b/pandas/tests/io/formats/style/test_format.py index 1d0d91b46553a..7ecd8ffec3bea 100644 --- a/pandas/tests/io/formats/style/test_format.py +++ b/pandas/tests/io/formats/style/test_format.py @@ -308,6 +308,28 @@ def test_precision_zero(df): assert ctx["body"][1][2]["display_value"] == "-1" +@pytest.mark.parametrize( + "formatter, exp", + [ + (lambda x: f"{x:.3f}", "9.000"), + ("{:.2f}", "9.00"), + ({0: "{:.1f}"}, "9.0"), + (None, "9"), + ], +) +def test_formatter_options_validator(formatter, exp): + df = DataFrame([[9]]) + with option_context("styler.format.formatter", formatter): + assert f" {exp} " in df.style.to_latex() + + +def test_formatter_options_raises(): + msg = "Value must be an instance of" + with pytest.raises(ValueError, match=msg): + with option_context("styler.format.formatter", ["bad", "type"]): + DataFrame().style.to_latex() + + def test_1level_multiindex(): # GH 43383 midx = MultiIndex.from_product([[1, 2]], names=[""])