2010-11-05 2 views
0

Я хочу добавить новый вход в список SESSION_U без стирания его содержимого. Я стараюсь это:Обработка исключений с NameError

... 
     try: 
      SESSION_U.append(UNIQUES) 
     except NameError: 
      SESSION_U = [] 
      SESSION_U.append(UNIQUES) 
... 

Я бы думать, что в первой попытке я бы получить NameError и SESSION_U список будет создан и прилагается; во второй раз try будет работать. Но это не так. Ты знаешь почему? Если это неясно, дайте мне знать, и я отправлю сценарий. Благодарю.

Редактировать

# save string s submitted from form to list K: 
    K = []   
    s = self.request.get('sentence') 
    K.append(s)        
    # clean up K and create 2 new lists with unique items only and find their frequency 
    K = K[0].split('\r\n')  
    UNIQUES = f2(K) 
    COUNTS = lcount(K, UNIQUES) 
    # append UNIQUES and COUNTS TO session lists. 
    # Session lists should not be initialized with each new submission 
    SESSION_U.append(UNIQUES) 
    SESSION_C.append(COUNTS) 

Если я ставлю SESSION_U и SESSION_C после K = [] их содержимое стирается с каждым представлением; если не; Я получаю NameError. Я ищу помощь о стандартном способе справиться с этой ситуацией. Спасибо. (Я работаю в Google App Engine)

+1

Определенно отправляйте больше кода. Это странная вещь, которую нужно попробовать, BTW. Почему бы просто не инициализировать вашу переменную до []? –

+4

Просто не пишите код, вызывающий 'NameError', потому что он не определяет переменную в определенном коде. Например, инициализируйте его значением по умолчанию (здесь, '[]'). Добавленный вами фрагмент работы, кстати, и если не происходит каких-то серьезных потоков, я не думаю, что он не может * работать ... – delnan

+0

@ Ned Batchelder: Если я делаю SESSION_U = [], то каждый раз, когда пользователь отправляет новый текст из формы, опущенной SESSİON_U. Я хочу сохранить строки сеанса в SESSİON_U; поэтому я хочу добавить строку к ней, не удаляя ее содержимое. Как мне это сделать? Благодарю. – Zeynel

ответ

0

Похоже, что код, который вы опубликовали, вероятно, содержится в обработчике запросов. Каковы ваши требования к этому списку SESSION_U? Очевидно, что вы хотите, чтобы он сохранялся по всем запросам, но есть несколько способов сделать это, и лучший выбор зависит от ваших требований.

Я подозреваю, что вы хотите хранить SESSION_U в datastore. Вам необходимо будет использовать transaction для автоматического обновления списка (поскольку несколько запросов могут попытаться одновременно обновить его). Хранение SESSION_U в хранилище данных делает его долговечным (т. Е. Оно будет сохраняться в запросах).

В качестве альтернативы вы можете использовать memcache, если вы не беспокоитесь о потере списка периодически. Вы даже можете сохранить список в глобальной переменной (из-за app caching, он будет поддерживаться между запросами до конкретного экземпляра и будет потерян при завершении экземпляра).

Смежные вопросы