2010-11-05 70 views
0

我想追加新的輸入到列表SESSION_U而不刪除它的內容。我試試這個:用NameError處理異常

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

我認爲,在第一次嘗試我會得到NameErrorSESSION_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_USESSION_CK = []他們的內容被刪除每次提交後;如果不;我得到NameError。我正在尋找有關處理這種情況的標準方法的幫助。謝謝。 (我正在使用Google App Engine)

+1

絕對發表更多的代碼。順便說一句,這是一件很奇怪的事情。爲什麼不把變量初始化爲[]? – 2010-11-05 16:05:26

+4

只是不要編寫引發'NameError'的代碼,因爲它沒有在某個代碼路徑中定義一個變量。比如,將它初始化爲默認值(這裏是'[]')。你發佈的代碼片段的方式,除非有一些嚴重的線程正在進行,我不認爲它*不能*工作... – delnan 2010-11-05 16:30:50

+0

@ Ned Batchelder:如果我做SESSION_U = []那麼每次用戶從SESSİON_U被清空的表單中提交新的文本。我想將會話字符串保存在SESSİON_U中;所以我想追加字符串而不刪除它的內容。我該怎麼做呢?謝謝。 – Zeynel 2010-11-05 17:09:31

回答

0

看來您發佈的代碼可能包含在請求處理程序中。您對SESSION_U列表有什麼要求?很明顯,您希望跨請求保留它,但有幾種方法可以做到這一點,最好的選擇取決於您的要求。

我懷疑你想存儲SESSION_Udatastore。您將需要使用transaction來自動更新列表(因爲多個請求可能會嘗試同時更新它)。將SESSION_U存儲在數據存儲中使其更耐用(即,它會在請求中持續存在)。如果您不擔心定期丟失列表,您也可以使用memcache。您甚至可以將列表存儲在全局變量中(由於app caching,它將在的特定實例的請求之間維持,並且在實例終止時將丟失)。