2012-01-18 10 views
0

私はネットワーク認証プログラムを作成しています。実際の検証部分に行くと、Pythonはエラー "KeyError:\ r \ n"で終了します。なぜPythonはすべてのもののKeyErrorを投げるのですか?これをどうすれば解決できますか?私はWindows 7の コードでPython 2.7.2を実行している:PythonがKeyErrorをスローする: r n

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

編集:それは投げ平手打ちヘッド理由この前

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") 

、私はラインを書きましたキーエラーは何らかの理由でクライアントがunameを設定できないということです。そこにはclient.recvが完全に無視され、次の行にスキップします。

+1

いくつかのコードが表示されますか? – tzaman

+0

それは今そこにある。 –

+0

KeyErrorは、存在しない辞書の項目にアクセスしようとしていることを意味します。 – RanRag

答えて

0

passcから削除していますが、unameは削除していません。多分それが問題です。 repr(uname)を印刷してみてください。

+0

これでちょうどKeyErrorを投げています: '' –

+0

何かの理由で、unameを設定していないという質問のコメントを読んでください –

+0

この時点の直前にクライアントは何をしていましたか?おそらく、 "\ r \ n"は前のメッセージから残っていたでしょう。クライアントの前のメッセージが、例えば、 "\ r \ n"を含む(size + 2)バイトで、サーバが 'recv(size)'でそれを読んだ場合、 "\ r \ n"は、入力と 'client.recv(size)'はその "\ r \ n"とすぐに戻ります。 – MRAB

0

client.recvが非ブロックの場合、0バイトを受信して​​処理を続行します。サーバーが応答する前に回線が動作している可能性があります

+0

どうすればこの問題を解決できますか? –

関連する問題