2

数値(int)を受信できるようにしたいこのTCPサーバーがあり、プログラムからの出力を解決するのに問題があります。必要なものを出力しますが、それに加えて、ValueErrorを使用してトレースバックを出力します。これを修正するにはどうすればよいですか?

Traceback (most recent call last):   File "server.py", line 18, in
<module>
    data = int(conn.recv(BUFFER_SIZE).strip()); ValueError: invalid literal for int() with base 10: ''

ここで私がしていることは、サーバーに整数を送信することです。

    data = int(conn.recv(BUFFER_SIZE).strip());

    foo = data + 1;

    if not data: break

    print "received data:", data
    print "\n foo:", foo

そして、それはうまくいくようですが、2つのプリントに加えて、前述のようにトレースバックも取得します:-/

編集:

それを指摘してくれてありがとう。データ(またはrecv)が空である可能性があるため、ifテストと出来上がりの下でロジックを移動しました...:D

        data = conn.recv(BUFFER_SIZE).strip();

        if not data: break

        command = int(data);
        foo = command + 1;
4

3 に答える 3

3

エラーメッセージが示すように、int()は空の文字列をバーフィングしています。したがって、これを確認して、を呼び出さないようにしてください。int()そうでない場合は、をキャッチして無視してValueErrorください。

戦略1:

data = conn.recv(BUFFER_SIZE).strip()
if data:
    data = int(data)
    foo = data + 1
    if not data: break

戦略2:

try:
    data = int(conn.recv(BUFFER_SIZE).strip());
except ValueError:
    continue
于 2012-08-05T15:10:42.203 に答える
2

int()問題は、空の文字列を呼び出そうとしていることです。つまり、式conn.recv(BUFFER_SIZE).strip()はに評価されてい''ます。(うまくいけば、そのスタックトレースはもう少し意味があります。)

int()呼び出す(またはブロックに入れる)前に有効なデータがあることを確認する必要がありますtry/except ValueError。または、連続する読み取りで文字列を作成する必要があります。

于 2012-08-05T15:10:10.970 に答える
0

それ以外の

data = int(conn.recv(BUFFER_SIZE).strip())

行う

data = int(conn.recv(BUFFER_SIZE).strip() or 0)

空の文字列の問題を回避するため。

于 2012-08-05T15:14:50.763 に答える