我正在尝试自学python,我正在尝试为我的Raspberry Pi创建一个可远程访问的GPIO连接服务器。当我建立连接时,我发送的第一个输入是我实际键入Putty的任何内容,然后输入为''。所以我对此进行了检查,但我仍然在if int(data [0])== 0:line上得到了该消息。有小费吗?对不起,如果这是一个新手问题。
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()
答案 0 :(得分: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()
答案 1 :(得分: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