pylint-dev/pylint

``bad-string-format-type``: only works on old-style string formatting and can't infer values

Open

#6,163 opened on Apr 3, 2022

View on GitHub
聽(3 comments)聽(0 reactions)聽(1 assignee)Python聽(4,978 stars)聽(1,059 forks)batch import
Bug :beetle:False Negative 馃Good first issueHacktoberfestHelp wanted 馃檹Needs PR

Description

Bug description

Two issues with bad-string-format-type:

  1. Just like bad-format-character the bad-string-format-type message is currently only raised for old-style string formatting.
  2. If only a single value needs to be formatted, the check does not work if the value to format is passed in as a variable. Using variables in tuples however is fine.

Given a file a.py:

# pylint: disable=consider-using-f-string,missing-module-docstring
WORD = "abc"
print("%d" % "abc")  # works
print("%d %d" % (WORD, 1))  # works
print("%d", WORD)  # doesn't work
print("{:d}".format("abc"))  # doesn't work
print(f"{'abc':d}")  #  doesn't work

Configuration

``pylintrc`` from ``pylint`` git repo.

Command used

pylint a.py

Pylint output

************* Module a
.notes/a.py:3:6: E1307: Argument 'builtins.str' does not match format type 'd' (bad-string-format-type)
.notes/a.py:4:6: E1307: Argument 'builtins.str' does not match format type 'd' (bad-string-format-type)

Expected behavior

All of the examples should raise the message.

Pylint version

pylint 2.14.0-dev0
astroid 2.11.2
Python 3.10.2 (main, Apr  3 2022, 14:46:07) [Clang 12.0.5 (clang-1205.0.22.9)]

OS / Environment

macOS BigSur 11.6

Additional dependencies

No response

Contributor guide

``bad-string-format-type``: only works on old-style string formatting and can't infer values 路 pylint-dev/pylint#6163 | Good First Issue