2012-08-05 83 views
2

我有这个TCP服务器,我希望能够接收数字(整数),我有一些困难解决一些输出来自程序。它输出它应该的内容,但是它还会输出一些跟踪ValueError。我该如何解决?获取ValueError:无效文字为int()与基数10:''字符串转换期间

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: '' 

什么IM这里做的是发送整数到服务器:

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

    foo = data + 1; 

    if not data: break 

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

这似乎工作的伟大,但除了两个印记我也得回溯提到: -/

编辑:

感谢kindall指出。由于数据(或recv的)可能是空的,我刚搬来的逻辑,如果测试下,瞧...:d

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

     if not data: break 

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

如果您正在获取回溯,该函数的执行被中断。因此,我怀疑您是在捕获该异常的上下文中运行此代码,但在此之后继续处理数据。 – 2012-08-05 15:09:24

+0

@MartijnPieters - 我认为这更可能是在一个循环中处理一些有效的数据,但然后扼流圈。否则,我们会在代码中看到'try/except'。 – detly 2012-08-05 15:11:34

+0

旁注:你不需要python中的分号。 – 2012-08-05 15:15:33

回答

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 
2

你的问题是,你试图调用int()上一个空字符串。换句话说,表达式conn.recv(BUFFER_SIZE).strip()正在评估为''。 (希望这堆栈跟踪,使更多的意义吧。)

你需要检查是否有有效数据调用int()之前(或把它放在一个try/except ValueError块),或者可能建立了绳子在连续读取。

0

而不是

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

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

以避免空字符串的问题。

+0

这不区分“0”和一个空字符串,不幸的是... – kindall 2012-08-06 16:19:56

相关问题