printf-string-formatting (UP031)
Added in v0.0.229 · Related issues · View source
Derived from the pyupgrade linter.
Fix is sometimes available.
What it does
Checks for printf-style string formatting, and offers to replace it with
str.format calls.
Why is this bad?
printf-style string formatting has a number of quirks, and leads to less
readable code than using str.format calls or f-strings. In general, prefer
the newer str.format and f-strings constructs over printf-style string
formatting.
Example
Use instead:
Fix safety
In cases where the format string contains a single generic format specifier
(e.g. %s), and the right-hand side is an ambiguous expression,
we cannot offer a safe fix.
For example, given:
val could be a single-element tuple, or a single value (not
contained in a tuple). Both of these would resolve to the same
formatted string when using printf-style formatting, but
resolve differently when using f-strings:
val = 1
print("%s" % val)  # "1"
print("{}".format(val))  # "1"
val = (1,)
print("%s" % val)  # "1"
print("{}".format(val))  # "(1,)"