diff --git a/pandas/io/html.py b/pandas/io/html.py
index b8cb6679a9562..1a0e0537ad325 100644
--- a/pandas/io/html.py
+++ b/pandas/io/html.py
@@ -587,7 +587,7 @@ def _parse_tfoot_tr(self, table):
def _setup_build_doc(self):
raw_text = _read(self.io)
if not raw_text:
- raise ValueError("No text parsed from document: {doc}".format(doc=self.io))
+ raise ValueError(f"No text parsed from document: {self.io}")
return raw_text
def _build_doc(self):
@@ -616,8 +616,8 @@ def _build_xpath_expr(attrs) -> str:
if "class_" in attrs:
attrs["class"] = attrs.pop("class_")
- s = [f"@{k}={repr(v)}" for k, v in attrs.items()]
- return "[{expr}]".format(expr=" and ".join(s))
+ s = " and ".join([f"@{k}={repr(v)}" for k, v in attrs.items()])
+ return f"[{s}]"
_re_namespace = {"re": "http://exslt.org/regular-expressions"}
@@ -846,7 +846,8 @@ def _parser_dispatch(flavor):
def _print_as_set(s) -> str:
- return "{" + "{arg}".format(arg=", ".join(pprint_thing(el) for el in s)) + "}"
+ arg = ", ".join(pprint_thing(el) for el in s)
+ return f"{{{arg}}}"
def _validate_flavor(flavor):
@@ -871,10 +872,8 @@ def _validate_flavor(flavor):
if not flavor_set & valid_flavors:
raise ValueError(
- "{invalid} is not a valid set of flavors, valid "
- "flavors are {valid}".format(
- invalid=_print_as_set(flavor_set), valid=_print_as_set(valid_flavors)
- )
+ f"{_print_as_set(flavor_set)} is not a valid set of flavors, valid "
+ f"flavors are {_print_as_set(valid_flavors)}"
)
return flavor
@@ -898,11 +897,11 @@ def _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs):
elif hasattr(io, "seekable") and not io.seekable():
# if we couldn't rewind it, let the user know
raise ValueError(
- "The flavor {} failed to parse your input. "
+ f"The flavor {flav} failed to parse your input. "
"Since you passed a non-rewindable file "
"object, we can't rewind it to try "
"another parser. Try read_html() with a "
- "different flavor.".format(flav)
+ "different flavor."
)
retained = caught