我将2.7代码移植到3.5中,2.7代码工作得很好。在旧代码运行2to3的和不断变化的明显后,我仍然得到以下错误消息:Python 2.7和3.5中的类型转换,如何让我的2.7代码在3.5下工作?
Exception in thread Thread-7:
Traceback (most recent call last):
File "C:\Users\Anaconda3\lib\threading.py", line 914, in _bootstrap_inner
self.run()
File "C:\Users\Anaconda3\lib\threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-2-eadc3d59ae9f>", line 70, in receiveData
nftp = self.parseNFTPData(stringBuffer(data[:-1]))
File "<ipython-input-2-eadc3d59ae9f>", line 101, in parseNFTPData
current_string += c
TypeError: Can't convert 'int' object to str implicitly
我明白了错误,但为什么在Python 3中,而不是2中提出了这个错误?在我看来,这是一个语法问题?!?
代码如下:
def parseNFTPData(self, strbuf):
quote = False
result = []
current_string = ""
while not strbuf.eof():
c = strbuf.read()
if c == "\"":
if quote:
quote = False
else:
quote = True
elif c == "(" and not quote:
list = self.parseNFTPData(strbuf)
result.append(list)
elif c == ")" and not quote:
result.append(self.typeConvert(current_string))
strbuf.read()
return result
elif len(current_string) > 0 and c == " " and not quote:
result.append(self.typeConvert(current_string))
current_string = ""
else:
current_string += c
if len(current_string) > 0:
result.append(self.typeConvert(current_string))
return result
'STRBUF' 是类StringBuffer的问题:
class stringBuffer:
def __init__(self, string):
self.buffer = string
self.readptr = 0
def read(self):
if self.readptr < len(self.buffer):
readc = self.buffer[self.readptr]
self.readptr += 1
else:
readc = False
return readc
def eof(self):
if self.readptr >= len(self.buffer):
return True
else:
return False
def peek(self):
return self.buffer[self.readptr]
@Idos为什么这么说?我在问为什么以及如何在2.7和3.5中处理这个问题。我在2.7中没有错误,为什么在3.5中提出错误? – cJc