2013-08-01 24 views
0

我遇到了一個奇怪的問題....我有以下代碼在我的本地開發中工作得非常好,但是當我在項目開發服務器中使用相同的代碼時,出現KeyError :'名字' 要麼我在這裏錯過了一些非常愚蠢的東西,或者我不知道的東西。只發生在一個開發環境中的Keyerror

def register(self,request, **kwargs): 


     try:  
      data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) 
      print data 
      print " reached register" 
      email = data['email'] 
      password = data['password'] 
      firstname = data['firstName'] 
      lastname = data['lastName'] 
      newdata = {'email' : email , 'password1': password , 'password2':password, 'firstname':firstname , 'lastname':lastname } 

日誌輸出如下:

[Wed Jul 31 21:42:24 2013] [error] {u'lastName': u'Adams', u'password': u'pass', u'email': u'[email protected]', u'firstName': u'Sam'} 
[Wed Jul 31 21:42:24 2013] [error] reached register 
[Wed Jul 31 21:42:24 2013] [error] ERROR:root:'firstname' 
[Wed Jul 31 21:42:24 2013] [error] Traceback (most recent call last): 
[Wed Jul 31 21:42:24 2013] [error] File "/home/ubuntu/djangoEC/userdetails/api.py", line 102, in register 
[Wed Jul 31 21:42:24 2013] [error]  firstname = data['firstName'] 
[Wed Jul 31 21:42:24 2013] [error] KeyError: 'firstname' 

唷,任何想法?

+1

你有一個沒有'except'的'try'。您粘貼的代碼段無效。 –

+0

什麼是數據?請給我們輸出'type(data)'。如果你的錯誤日誌是正確的,它不是一個普通的'dict'。 – Tadeck

+1

根據在不同系統上運行的Python版本,可能會導致關鍵錯誤,因爲您分配數據['firstName']',可能會將其解釋爲字節字符串(非Unicode),而數據中的密鑰爲實際上是一個unicode字符串'data [u'firstName']'。 如果您運行可能解釋不一致行爲的不同Python版本。 – bossi

回答

-1

由@tdelaney回答。使用數據[u'firstName']解決了這個問題。

1

您的代碼查找'firstName',但例外說'firstname'。請注意情況。或者你的真實代碼中有'firstname'(或者你的真實數據有'firstname'),或者其他一些不匹配的錯誤),或者data是一些奇怪的類似於字典的對象,它會在查找時降低鍵值。我懷疑這是第一個答案。