diff options
author | Marc Mueller <30130371+cdce8p@users.noreply.github.com> | 2021-07-28 22:15:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-28 22:15:25 +0200 |
commit | 107f59e949f1824251d14717eb57650273c0ffff (patch) | |
tree | 3fd711a55aabf3c6ac4cfe84ce998200f32ff011 /tests | |
parent | ae6cbd1062c0a8e68d32a5cdc67c993da26d0f4a (diff) | |
download | pylint-git-107f59e949f1824251d14717eb57650273c0ffff.tar.gz |
Omit no-member error if guarded behind if stmt (#4764)
* Omit no-member error if guarded behind if stmt
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/functional/n/no/no_member_if_statements.py | 79 | ||||
-rw-r--r-- | tests/functional/n/no/no_member_if_statements.txt | 3 |
2 files changed, 82 insertions, 0 deletions
diff --git a/tests/functional/n/no/no_member_if_statements.py b/tests/functional/n/no/no_member_if_statements.py new file mode 100644 index 000000000..ad87e9950 --- /dev/null +++ b/tests/functional/n/no/no_member_if_statements.py @@ -0,0 +1,79 @@ +# pylint: disable=invalid-name,missing-docstring,pointless-statement +from datetime import datetime +from typing import Union + +value = "Hello World" +value.isoformat() # [no-member] + + +if isinstance(value, datetime): + value.isoformat() +else: + value.isoformat() # [no-member] + + +def func(): + if hasattr(value, "load"): + value.load() + + if getattr(value, "load", None): + value.load + + +if value.none_existent(): # [no-member] + pass + +res = value.isoformat() if isinstance(value, datetime) else value + + +class Base: + _attr_state: Union[str, datetime] = "Unknown" + + @property + def state(self) -> Union[str, datetime]: + return self._attr_state + + def some_function(self) -> str: + state = self.state + if isinstance(state, datetime): + return state.isoformat() + return str(state) + + +# https://github.com/PyCQA/pylint/issues/1990 +# Attribute access after 'isinstance' should not cause 'no-member' error +import subprocess # pylint: disable=wrong-import-position # noqa: E402 + +try: + subprocess.check_call(['ls', '-']) # Deliberately made error in this line +except Exception as err: + if isinstance(err, subprocess.CalledProcessError): + print(f'Subprocess error occured. Return code: {err.returncode}') + else: + print(f'An error occured: {str(err)}') + raise + + +# https://github.com/PyCQA/pylint/issues/4168 +# 'encode' for 'arg' should not cause 'no-member' error +mixed_tuple = (b"a", b"b", b"c", b"d") +byte_tuple = [arg.encode('utf8') if isinstance(arg, str) else arg for arg in mixed_tuple] + +for arg in mixed_tuple: + if isinstance(arg, str): + print(arg.encode('utf8')) + else: + print(arg) + + +# https://github.com/PyCQA/pylint/issues/1162 +# Attribute access after 'isinstance' should not cause 'no-member' error +class FoobarException(Exception): + foobar = None + +try: # noqa: E305 + pass +except Exception as ex: + if isinstance(ex, FoobarException): + ex.foobar + raise diff --git a/tests/functional/n/no/no_member_if_statements.txt b/tests/functional/n/no/no_member_if_statements.txt new file mode 100644 index 000000000..2bc673b49 --- /dev/null +++ b/tests/functional/n/no/no_member_if_statements.txt @@ -0,0 +1,3 @@ +no-member:6:0::Instance of 'str' has no 'isoformat' member:INFERENCE +no-member:12:4::Instance of 'str' has no 'isoformat' member:INFERENCE +no-member:23:3::Instance of 'str' has no 'none_existent' member:INFERENCE |