2012-01-18 109 views
0

我正在編寫一個網絡認證程序,當我到達實際驗證部分時,Python退出並顯示錯誤「KeyError:\ r \ n」。爲什麼Python拋出KeyError,所有的東西,我該如何解決這個問題?我在Windows上運行的Python 2.7.2 7. 代碼:Python拋出KeyError: r n

client.send("You should enter your username: ") 
    uname=client.recv(size) 
    client.send("You should also enter your password: ") 
    passc=client.recv(size) 
    client.send("\r\nI will verify your information.\r\n") 
    if users[uname].strip(cr) == passc.strip(cr): 
     client.send("It worked, continue...") 
    else: client.send("It didn't work\r\n") 

在此之前,我寫了一行:

client.send("Press return"); cr = client.recv(5)

編輯:拍打頭部它拋出一個理由關鍵錯誤在於,出於某種原因,它不會讓客戶端設置爲uname。它完全忽略client.recv並跳到下一行。

+1

我們可以看到一些代碼嗎? – tzaman 2012-01-18 00:25:24

+0

當然。它現在在那裏。 – 2012-01-18 00:26:47

+0

一個KeyError意味着你正試圖訪問一個不存在的字典中的項目 – RanRag 2012-01-18 00:30:26

回答

0

您正在從passc剝離,但不是uname。也許這就是問題所在。嘗試打印repr(uname)

+0

現在它只是拋出KeyError:'' – 2012-01-18 00:37:03

+0

閱讀問題中的評論,這是由於某種原因,不設置uname – 2012-01-18 00:41:00

+0

客戶在這之前做了什麼?也許「\ r \ n」是從前面的消息中遺留下來的。如果客戶以前的消息是(大小+2)字節,包括終止的「\ r \ n」,並且服務器用「recv(size)」讀取它,那麼該「\ r \ n」仍將等待輸入和'client.recv(size)'將立即以「\ r \ n」返回。 – MRAB 2012-01-18 00:48:03

0

如果client.recv是非阻塞的,它將接收0個字節並繼續。在服務器響應之前,該線路可能正在運行

+0

我該如何解決這個問題? – 2012-01-18 21:01:06