unstale

pypi / pylint

pylint

What changed in pylint 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-21.

2 breaking1 deprecations39 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.2 on npm

pylint 442 changes

Breaking changes 2

  • Using several output formats that all write to stdout now raises an error instead of printing every message more than once.

    4.1.3release notes

  • Overload stubs in subclasses are no longer compared to the overridden method; methods with overloads are compared through their implementation instead of their first stub.

    4.1.3release notes

Deprecations 1

  • Explicitly passing confidence=None to add_message, add_ignored_message, or Message emits a DeprecationWarning and will raise an error in pylint 5.0.

    4.1.2release notes

Fixes and other changes 39

  • Overload stubs in subclasses are no longer compared to the overridden method; methods with overloads are compared through their implementation instead of their first stub.

    4.1.3release notes

  • No longer reports this false positive when an attribute is assigned inside the setter of an old-style property(fget, fset) call.

    4.1.3release notes

  • The checker is disabled when min-similarity-lines is set to 0, as documented, and no longer crashes.

    4.1.3release notes

  • The difference column now shows the change since the previous run instead of repeating the previous count.

    4.1.3release notes

  • Allows the __main__ module name in camelCase, PascalCase, and UPPER_CASE naming styles without reporting this message.

    4.1.3release notes

  • No longer reports false positives for module-level all-caps aliases that preserve the name of an external callable.

    4.1.3release notes

  • The difference column now shows the change since the previous run instead of repeating the previous count.

    4.1.3release notes

  • No longer suggests a non-equivalent rewrite when an inner min or max call has multiple arguments.

    4.1.3release notes

  • Comprehensions inside branches that cannot run are no longer checked for missing members.

    4.1.3release notes

  • Calls to functions whose bodies contain only an ellipsis are no longer inferred as returning None, preventing false positives on their results.

    4.1.3release notes

  • Calls to functions whose bodies contain only an ellipsis are no longer inferred as returning None, preventing false positives on their results.

    4.1.3release notes

  • Calls to functions whose bodies contain only an ellipsis are no longer inferred as returning None, preventing false positives on their results.

    4.1.3release notes

  • No longer reports this false positive when a lambda uses its parameters, including from a nested lambda, and that name is assigned later in the module.

    4.1.3release notes

  • No longer reports a false positive when a subclass of a subscripted generic base accesses a protected member through that base.

    4.1.3release notes

  • No longer crashes when a diagram includes a class created by namedtuple or an argparse.Namespace.

    4.1.3release notes

  • Avoids hanging or crashing with RecursionError when --all-associated follows an attribute whose inferred class is rebuilt by astroid on every inference.

    4.1.3release notes

  • No longer warns for method parameters that retain a built-in name from an overridden method.

    4.1.3release notes

  • No longer emits this message when the bare _ variable is reused to discard values of different types.

    4.1.3release notes

  • No longer reports this false positive in .pyi stub files where __init__ bodies are ellipses.

    4.1.3release notes

  • Fixes an IndexError crash when an Enum class defines an __init__ method without arguments.

    4.1.3release notes

  • No longer reports this false positive when a decorator returning its argument unchanged is stacked above a decorator accepting **kwargs.

    4.1.3release notes

  • No longer reports a false positive for an ellipsis-only Protocol method inside a conditional block such as if TYPE_CHECKING.

    4.1.3release notes

  • No longer reports a false positive when negating a comparison between instances of a set or frozenset subclass.

    4.1.3release notes

  • Calls to functions whose bodies contain only an ellipsis are no longer inferred as returning None, preventing false positives on their results.

    4.1.3release notes

  • Does not emit this message for a yield immediately after raise or sys.exit() when the yield marks a function as a generator.

    4.1.3release notes

  • No longer reports unused arguments in .pyi stub files where function bodies are ellipses.

    4.1.3release notes

  • No longer reports a name used by a later target of the same assignment as used before assignment.

    4.1.3release notes

  • No longer reports a name bound by a tuple or list target of a with item as used before assignment when used by a later item in the same with statement.

    4.1.3release notes

  • No longer reports a name assigned in a comprehension condition as used before assignment when it is used in the element.

    4.1.3release notes

  • No longer reports this false positive when a keyword-only parameter is passed to the parent under the same keyword with a different value.

    4.1.3release notes

  • No longer reports a false positive for a line-too-long suppression when a # inside a string literal precedes the pylint comment.

    4.1.3release notes

  • Fixes a crash when the class of a called attribute cannot be fully inferred, including when the attribute is a with-statement target or appears inside a comprehension.

    4.1.2release notes

  • Fixes a crash when calling __bases__ on a class.

    4.1.2release notes

  • Passing confidence=None to add_message, add_ignored_message, or Message is accepted again and means UNDEFINED.

    4.1.2release notes

  • Fixes a crash when a name bound by a type statement (a TypeVar) is used in a with statement.

    4.1.2release notes

  • Fixes a false positive when unpacking a tuple concatenation whose elements have several possible values.

    4.1.2release notes

  • Fixes a crash in this check when import final is used.

    4.1.2release notes

  • Fixes a TypeError when checking a class whose metaclass name binding has no line number.

    4.1.2release notes

  • Pylint 4.1.1 is the first 4.1 release available on PyPI after 4.1.0 required an unreleased dill version on Python 3.15.

    4.1.1release notes