获取ValueError:在转换字符串期间,带有基数为10的int()的无效文字:''

时间:2012-08-05 15:07:24

标签: python

我有这个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

这看起来效果很好,但除了这两个版画之外,我还会得到如上所述的追溯: - /

编辑:

谢谢你指出来。由于数据(或recv)可能为空,我只是在if测试下移动逻辑并且瞧... ... D

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

        if not data: break

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

3 个答案:

答案 0 :(得分:4)

正如错误消息所示,int()正在对空字符串进行处理。因此,检查一下并避免调用int(),否则捕获并忽略ValueError

策略一:

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

策略二:

try:
    data = int(conn.recv(BUFFER_SIZE).strip());
except ValueError:
    continue

答案 1 :(得分:2)

您的问题是您尝试在空字符串上调用int()。换句话说,表达式conn.recv(BUFFER_SIZE).strip()正在评估''。 (希望堆栈跟踪现在更有意义。)

您需要在调用int()之前检查您是否拥有有效数据(或将其放在try/except ValueError块中),或者在连续读取时建立字符串。

答案 2 :(得分:0)

而不是

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

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

以避免空字符串出现问题。