Skip to content

False negative: no-member in conditional branch #9405

Open
@hemberger

Description

@hemberger

Bug description

There is a difference in behavior inside conditional branches depending on if the branch is reachable or not. If it is unreachable, then undefined-variable warnings are emitted, but no-member warnings are not (whereas if it is reachable, both undefined-variable and no-member warnings are emitted).

For example:

#!/usr/bin/env python3
"""False negative no-member"""
import datetime

SOME_BOOL = False
if SOME_BOOL:
    print(bar)
    print(datetime.does_not_exist)

This does not report no-member for datetime.does_not_exist. However, if we change SOME_BOOL = False to SOME_BOOL = True, then the no-member warning is emitted.

This can also happen for more complex conditionals, where it's not clear whether or not the branch is reachable. If pylint is performing fewer checks in conditional branches that it determines are unreachable as a performance optimization, then it probably should at least report that the branch as unreachable.

Thank you!

Configuration

No response

Command used

pylint test.py

Pylint output

************* Module test
test.py:7:10: E0602: Undefined variable 'bar' (undefined-variable)

Expected behavior

************* Module test
test.py:7:10: E0602: Undefined variable 'bar' (undefined-variable)
test.py:8:10: E1101: Module 'datetime' has no 'does_not_exist' member (no-member)

Pylint version

pylint 3.0.3
astroid 3.0.1
Python 3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]

OS / Environment

RHEL8

Additional dependencies

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    False Negative 🦋No message is emitted but something is wrong with the codeNeeds 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