Этот вопрос долгое время оставался без ответа, поэтому я постараюсь помочь любому, кто пытается решить подобную проблему.С течением времени и тем фактом, что вы не опубликовали трассировку стека или не отформатировали свой код должным образом, я буду игнорировать то, что вы указываете, что конкретная строка вашего кода ответственна за ошибку.Сначала я продемонстрирую некоторый код, который вызывает эту ошибку, и объясню, почему.
>>> a_list = []
>>> a_list()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
Эта ошибка возникает, поскольку переменная a_list указывает на определенный пустой список в памяти.Сам объект списка не может быть вызван.Callable означает, что вы можете выполнить его как функцию или конструктор класса (или объект, который реализовал магический метод __call__
, довольно редко).Вы не выполняете фактический список.
Правильный способ добавить один элемент в список - это добавить (я вижу, что вы оборачиваете элемент в списке, а затем используете метод extends, которыйэто не простой способ сделать это, и, следовательно, вероятно, менее эффективный.)
>>> a_list.append('foo')
Мы можем получить этот элемент с индексом:
>>> a_list[0]
'foo'
Распространенная ранняя ошибка для нового Pythonучащиеся (или эксперты, которые печатают слишком быстро) должны использовать скобки вместо скобок, и мы видим, что мы получаем ту же ошибку.
>>> a_list(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
В интерпретаторе это быстро улавливается, но в Maya есть что-то, что не выполняется, пока не запускается ваш код, и поэтому эта проблема никогда не обнаруживалась.
ДругойВозможно, я вижу, что вы перезаписываете встроенный object
.Вы получите аналогичную ошибку, если попытаетесь вызвать экземпляр объекта.
>>> an_object = object()
>>> an_object()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'object' object is not callable
Итак, мне интересно, возможно, вы перезаписали конструктор списка, например встроенный list
или, возможно, cmds.textScrollList
.Если это так, посмотрите в своем коде любые возможные случаи, когда вы назначаете список следующим образом:
list = ['foo', 'bar'] # Don't do this!!!
исправьте его и перезапустите сеанс Python.
В качестве встречного примера, помогающего понять вызов списка, он может (но не должен) быть реализован.
Чтобы реально сделать объект list
вызываемым, создайте его подкласс иреализовать метод __call__
(опять же, вы, вероятно, не должны делать это в рабочем коде), в этом случае мы расширяем список аргументами, которые мы передаем в список:
class MyList(list):
def __call__(self, *args):
self.extend(args)
>>> a_list = MyList(['foo', 'bar', 'baz'])
>>> a_list('ham', 'spam', 'eggs', 'spam')
['foo', 'bar', 'baz', 'ham', 'spam', 'eggs', 'spam']
Не делайтеэтот.