【发布时间】:2016-11-15 08:52:13
【问题描述】:
我将 2.7 代码移植到 3.5 中,并且 2.7 代码运行良好。运行 2to3 并更改旧代码中的明显内容后,我仍然收到以下错误消息:
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会出现错误?
标签: python string python-3.x type-conversion python-2.x