2012-12-28 109 views
1

我试图教自己python,我试图为我的树莓派创建一个可远程访问的GPIO连接服务器。当我建立连接时,我发送的第一个输入是我实际输入到Putty中的任何输入,然后输入是''。所以我对此进行了检查,但是我仍然在if(int [data])= 0行上得到这条消息。有小费吗?对不起,如果这是一个新手问题。int()与基数10的无效文字:''

def run(self): 
    try: 
     while True: 
      ret = -1 
      data = self.cs.recv(self.BUFFERSIZE) 
      if data=='': 
       continue 
      elif int(data[0])==0: 
       self.cs.send(str(GPIO_setup(data))) 
      elif int(data[0])==1: 
       self.cs.send(str(GPIO_output(data))) 
      elif int(data[0])==2: 
       self.cs.close() 
    except RuntimeError: 
     if self.cs: 
      self.cs.close() 

回答

1

数据[0]可能是''或者是其他非数字的东西。但是,调试,尝试这样的:因为你的代码和错误的

def run(self): 
    data = None 
    try: 
     while True: 
      ret = -1 
      data = self.cs.recv(self.BUFFERSIZE) 
      if data=='': 
       continue 
      elif int(data[0])==0: 
       self.cs.send(str(GPIO_setup(data))) 
      elif int(data[0])==1: 
       self.cs.send(str(GPIO_output(data))) 
      elif int(data[0])==2: 
       self.cs.close() 
    except RuntimeError: 
     print "error on input of: '%s'" % data 
     if self.cs: 
      self.cs.close() 
+0

尝试这样做,它失败'错误的输入:',有一个新的行...所以我猜测数据是\ n字符...任何想法,为什么? – Narabhut

1

我怀疑data是一个列表。这将无法在正是你所观察到的方式:

In [2]: data = ['', 'test'] 

In [3]: data == '' 
Out[3]: False 

In [4]: data[0] 
Out[4]: '' 

In [5]: int(data[0]) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-5-4196b6567736> in <module>() 
----> 1 int(data[0]) 

ValueError: invalid literal for int() with base 10: '' 

注意,由于这一定义的data,而转换仍失败,则不会触发原始的测试。

因此,最好使用另一个直接测试data[0]的测试;

data = self.cs.recv(self.BUFFERSIZE) 
if len(data[0]) == 0: 
    continue 
+0

测试失败以及...它似乎len(数据[0])不是0和len(数据)不是0,但数据[0]仍然是'' – Narabhut

+0

请添加一行'打印数据'你的功能,运行它,并告诉我们'数据'究竟是什么...... –

+0

我有,而调试....它打印一个空行。 – Narabhut

相关问题