Почему я получаю предупреждение: класс 'Iterable' не определяет '__getitem __'...? - PullRequest
0 голосов
/ 08 марта 2020

У меня есть функция, целью которой является получение итерируемого или синглтона x и параметра num_nodes и:

  • Если x является синглтоном, вернуть список, состоящий из num_nodes копий x.
  • Если x - это список длины num_nodes, верните x.
  • В противном случае выведите ошибку ValueError.

Код функции (обновлено):

def ensure_list_for_nodes(x, num_nodes, default=None):
    # Is x None?
    if x is None:
        return [default] * num_nodes
    else:
        # Determine whether x is singleton or iterable.
        if is_iterable(x):
            if len(list(x)) == num_nodes:
                return list(x)
            else:
                raise ValueError('x must be a singleton or a list of length num_nodes')
        else:
            return [x] * num_nodes

Обратите внимание, что функция возвращает список в любом случае (или вызывает ошибку).

Вот код для is_iterable() ( обновлено):

def is_iterable(x):
    # First check whether x is a string (because strings act like iterables).
    if isinstance(x, str):
        return False
    else:
        try:
            _ = iter(x)
        except TypeError:
            return False
        else:
            return True

Затем я вызываю функцию:

my_list = ensure_list_for_nodes(5, 3)
print(my_list[0])

И PyCharm выдает мне предупреждение о [ in my_list[0]:

Class 'Iterable' does not define '__getitem__', so the '[]' operator cannot be used on its instances

Кажется, что PyCharm понимает, что моя функция возвращает итерируемое, но не то, что итерируемое всегда является списком. Что здесь не так, и как я могу это исправить?

(Обратите внимание, что функция, кажется, работает правильно. Меня просто беспокоит предупреждение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...