1

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

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()
4

2 回答 2

1

data[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()
于 2012-12-28T23:03:05.487 回答
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
于 2012-12-28T23:18:24.903 回答