我有這樣的代碼:Django的/ Python的 - 嘗試/除了問題
try:
var = request.POST['var']
except NameError:
var = ''
爲什麼總是代碼後, 「除」 正在執行?即使存在request.POST['var']
。
我有這樣的代碼:Django的/ Python的 - 嘗試/除了問題
try:
var = request.POST['var']
except NameError:
var = ''
爲什麼總是代碼後, 「除」 正在執行?即使存在request.POST['var']
。
你怎麼知道它正在執行?或許request.POST['var']
也是''
,所以你不能說出區別。
同樣,
var = request.POST['var']
可以提高一個NameError
的唯一途徑是,如果request
不存在。
如果request.POST
不存在,意味着POST
不作爲request
屬性存在從而提高AttributeError
代替,並且如果request.POST['var']
不存在,意味着'var'
不是request.POST
從而提高KeyError
代替密鑰。
編輯:
我的猜測是,你不發送POST
。但無法確定。
一個更好的方式做你彷彿是試圖做可能是
var = request.POST.get('var', 'some default value')
其中第二個參數POST字典的get
方法(在這種情況下'var'
)如果鍵返回值不存在。你的翻譯準確例如會導致:
var = request.POST.get('var', '')
這樣一來,不需要try...except
塊或條件語句。
如果'request'未定義,這似乎就是這種情況。 – 2010-01-12 16:57:53
消除猜測並用KeyboardInterrupt
之類的東西替換NameError
,看看回溯,你就會確切地知道問題所在。
這是查找問題原因的最佳方法。嘗試/除了塊是有用的,但他們也可以隱藏你想找的問題。首先將其從等式中排除。然後,在解決問題後,重新放入。 – jcdyer 2010-01-12 20:28:48
你的情況下下面的結果是什麼?
except NameError, e:
print e
嘗試
try: if request.method == 'POST': var = request.POST['var'] except NameError: var = ''
'變種' 是絕對不是epmty - 我看到它在螢火蟲。當我使用AtrributeError而不是名稱錯誤時,我看到在「 –
DJPython
2010-01-12 17:04:10
huh中找不到消息」Key'var',這意味着'request.POST'中沒有'var' - firebug *是不是python **,因爲firebug在瀏覽器上運行,所以它不能顯示python內存,python對象內容,或者運行在服務器上的腳本的任何內容。你對你的假設錯了。 – nosklo 2010-01-12 23:57:08
您正在混合兩個'var' - 棧幀中的'var'可能存在。但它肯定不存在作爲您的POST中的一個關鍵!這就是錯誤信息告訴你的。 – 2010-01-13 11:44:34