int()的基数为10的文字无效:''

时间:2012-12-28 22:58:48

标签: python casting slice

我正在尝试自学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()

2 个答案:

答案 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