Skip to content

Inconsistency between used-before-assignment and possibly-used-before-assignment for if/elif/else #9879

Open
@nikita-leontiev

Description

@nikita-leontiev

Bug description

Below code leads to used-before-assignment error for func2:

from module import get_module_name

module_name = get_module_name()
if module_name == "module1":
    from module1 import func1
elif module_name == "module2":
    from module2 import func1, func2
elif module_name == "module3":
    from module3 import func1
else:
    assert False

if __name__ == "__main__":
    func1()
    func2()

Adding func2 import from module3:

from module import get_module_name

module_name = get_module_name()
if module_name == "module1":
    from module1 import func1
elif module_name == "module2":
    from module2 import func1, func2
elif module_name == "module3":
    from module3 import func1, func2
else:
    assert False

if __name__ == "__main__":
    func1()
    func2()

For some reason error changed to possibly-used-before-assignment.

Configuration

Without pylintrc.

Command used

pylint -sn --disable=E0401,C0114 test.py

Pylint output

$ pylint -sn --disable=E0401,C0114 test.py
************* Module test
test.py:15:4: E0601: Using variable 'func2' before assignment (used-before-assignment)
$ pylint -sn --disable=E0401,C0114 test.py
************* Module test
test.py:15:4: E0606: Possibly using variable 'func2' before assignment (possibly-used-before-assignment)

Expected behavior

E0601 error for both cases.

Pylint version

pylint 3.2.6
astroid 3.2.4
Python 3.8.10 (default, Jul 29 2024, 17:02:10)
[GCC 9.4.0]

OS / Environment

Ubuntu 20.04

Additional dependencies

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    C: used-before-assignmentIssues related to 'used-before-assignment' checkMinor 💅Polishing pylint is always niceNeeds PRThis issue is accepted, sufficiently specified and now needs an implementation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions