У меня есть функция, целью которой является получение итерируемого или синглтона 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 понимает, что моя функция возвращает итерируемое, но не то, что итерируемое всегда является списком. Что здесь не так, и как я могу это исправить?
(Обратите внимание, что функция, кажется, работает правильно. Меня просто беспокоит предупреждение.)