2010-01-12 113 views

回答

8

你怎麼知道它正在執行?或許request.POST['var']也是'',所以你不能說出區別。

同樣,

var = request.POST['var'] 

可以提高一個NameError的唯一途徑是,如果request不存在。

如果request.POST不存在,意味着POST不作爲request屬性存在從而提高AttributeError代替,並且如果request.POST['var']不存在,意味着'var'不是request.POST從而提高KeyError代替密鑰。


編輯:

我的猜測是,你不發送POST。但無法確定。

+0

'變種' 是絕對不是epmty - 我看到它在螢火蟲。當我使用AtrributeError而不是名稱錯誤時,我看到在「 – DJPython 2010-01-12 17:04:10

+1

huh中找不到消息」Key'var',這意味着'request.POST'中沒有'var' - firebug *是不是python **,因爲firebug在瀏覽器上運行,所以它不能顯示python內存,python對象內容,或者運行在服務器上的腳本的任何內容。你對你的假設錯了。 – nosklo 2010-01-12 23:57:08

+0

您正在混合兩個'var' - 棧幀中的'var'可能存在。但它肯定不存在作爲您的POST中的一個關鍵!這就是錯誤信息告訴你的。 – 2010-01-13 11:44:34

1

一個更好的方式做你彷彿是試圖做可能是

var = request.POST.get('var', 'some default value') 

其中第二個參數POST字典的get方法(在這種情況下'var')如果鍵返回值不存在。你的翻譯準確例如會導致:

var = request.POST.get('var', '') 

這樣一來,不需要try...except塊或條件語句。

+1

如果'request'未定義,這似乎就是這種情況。 – 2010-01-12 16:57:53

2

消除猜測並用KeyboardInterrupt之類的東西替換NameError,看看回溯,你就會確切地知道問題所在。

+1

這是查找問題原因的最佳方法。嘗試/除了塊是有用的,但他們也可以隱藏你想找的問題。首先將其從等式中排除。然後,在解決問題後,重新放入。 – jcdyer 2010-01-12 20:28:48

1

你的情況下下面的結果是什麼?

except NameError, e: 
    print e 
0

嘗試

 
try: 
      if request.method == 'POST': 
       var = request.POST['var']           
except NameError:     
       var = ''