Отладка 101:
1822:~/mypy$ python3 stack52920742.py
Traceback (most recent call last):
File "stack52920742.py", line 32, in <module>
print (cx([4,1,6,2,3,5,8,9,7,10]))
File "stack52920742.py", line 30, in cx
return [[d[i] for i in range(len(d))] for l in permutations(newArray) for d in ({p[n]: n for s, p in zip(c, cycle({n: i for i, n in enumerate(s)} for s in l)) for n in s},)]
File "stack52920742.py", line 30, in <listcomp>
return [[d[i] for i in range(len(d))] for l in permutations(newArray) for d in ({p[n]: n for s, p in zip(c, cycle({n: i for i, n in enumerate(s)} for s in l)) for n in s},)]
TypeError: 'list' object is not callable
Мы хотим увидеть трассировку, а не только сообщение об ошибке.Нам нужно знать, ГДЕ возникает ошибка, а не просто, как говорится.
Ошибка означает, что некоторая переменная, имеющая значение list
, обрабатывается так, как если бы она былафункция.То есть за списком следует (...)
.Списки не являются функциями, они не callable
.Их можно индексировать только в том случае, если в Python используется синтаксис []
.
Вероятным кандидатом является
cycle({n: i for i, n in enumerate(s)} for s in l)
. Похоже, он вызывает функцию cycle
с кортежемсловари.Но если бы cycle
был списком, он бы выдал эту ошибку.
Что такое cycle
?
from itertools import cycle
, но также
cycle = []
Очевидно, второе назначениепереписывает первый.
Если я переименую этот внутренний cycle
во что-то вроде alist
, он запустится, хотя печать будет
[[], []]
cycles
, перед длинным return
будет
[[4, 2, 1], [6, 5, 3], [8, 9, 7], [10]]
Почему cx
выполняет всю работу, создает этот список cycles
, а затем никогда не использует его?
Вы просто скопировали функцию из какого-то места, но не отладилиэто?