diff --git a/doc/whatsnew/fragments/10752.false_positive b/doc/whatsnew/fragments/10752.false_positive new file mode 100644 index 0000000000..f835d8d7d2 --- /dev/null +++ b/doc/whatsnew/fragments/10752.false_positive @@ -0,0 +1,5 @@ +Fixed false positive for ``logging-unsupported-format`` when no arguments are provided to logging functions. + +According to Python's logging documentation, no formatting is performed when no arguments are supplied, so strings like ``logging.error("%test")`` are valid. + +Closes #10752 diff --git a/pylint/checkers/logging.py b/pylint/checkers/logging.py index 3426abdd67..f1de1c5e61 100644 --- a/pylint/checkers/logging.py +++ b/pylint/checkers/logging.py @@ -355,12 +355,16 @@ def _check_format_string(self, node: nodes.Call, format_arg: Literal[0, 1]) -> N keyword_args_cnt + implicit_pos_args + explicit_pos_args ) except utils.UnsupportedFormatCharacter as ex: - char = format_string[ex.index] - self.add_message( - "logging-unsupported-format", - node=node, - args=(char, ord(char), ex.index), - ) + if num_args > 0: + # Only report unsupported format characters if arguments are provided + # When no arguments are supplied, no formatting is performed + # https://docs.python.org/3/library/logging.html#logging.Logger.debug + char = format_string[ex.index] + self.add_message( + "logging-unsupported-format", + node=node, + args=(char, ord(char), ex.index), + ) return except utils.IncompleteFormatString: self.add_message("logging-format-truncated", node=node)