Как мне объединить кортеж или преобразовать список в кортеж? - PullRequest
1 голос
/ 27 июля 2011

У меня есть кортеж INSTALLED_APPS, и я хочу объединить в него дополнительные элементы, чтобы мои локальные приложения также были в кортеже без изменения файла основных настроек. Я зашел так далеко:

DEFAULT_APPS = list(INSTALLED_APPS)
MY_APPS_LIST = DEFAULT_APPS.append('south')

однако, если я попытаюсь снова преобразовать это в кортеж, запустив:

INSTALLED_APPS = tuple(MY_APPS_LIST)

Я получаю:

TypeError: 'NoneType' object is not iterable

Вопрос довольно фундаментальный, я бы сказал, но я не могу найти "метод" для этого, или даже любой метод, который работает для меня вообще ... Я обнаружил, что и list () и кортеж () в оболочке Django возвращает пустой объект этого типа, поэтому я не понимаю, откуда может возникнуть ошибка TypeError ...

Помощь оценена!

Ответы [ 4 ]

8 голосов
/ 27 июля 2011

append не возвращает новый список - он изменяет исходный список, возвращая None.Вы хотите MY_APPS_LIST = DEFAULT_APPS + ['south']

3 голосов
/ 27 июля 2011

обратите внимание, что можно использовать + для объединения кортежей, поэтому, если INSTALLED_APPS является кортежем:

INSTALLED_APPS = DEFAULT_APPS + ('south',)

INSTALLED_APPS будет кортежем с 'south' в качестве последнего элемента

3 голосов
/ 27 июля 2011
Методы

list работают на месте и, следовательно, возвращают None. Если вы хотите добавить другой элемент в существующий список и вернуть только результат, просто добавьте их.

MY_APPS_LIST = DEFAULT_APPS + ['south']
1 голос
/ 27 июля 2011

Метод list.append НЕ возвращает список, к которому вы добавили. Это метод на месте. Вы должны делать

DEFAULT_APPS = list(INSTALLED_APPS)
DEFAULT_APPS.append('south')
MY_APPS_LIST = DEFAULT_APPS
...