我有这个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;
答案 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)
以避免空字符串出现问题。