嗯,我有现成的代码,我确信它确实有效,但是我收到以下错误:
TypeError:描述符'split'需要一个'str'对象但是收到了一个 '的unicode'
这就是整个def:
def assemblePacket(self, type):
ipSplit = str.split(self.serverVars[0], '.')
packet = 'SAMP'
packet += chr(int(ipSplit[0]))
packet += chr(int(ipSplit[1]))
packet += chr(int(ipSplit[2]))
packet += chr(int(ipSplit[3]))
packet += chr(self.serverVars[1] & 0xFF)
packet += chr(self.serverVars[1] >> 8 & 0xFF)
packet += type
return packet
问题在于:
ipSplit = str.split(self.serverVars[0], '.')
我确定这不是因为代码,我之前尝试过(相同的脚本)并且它有效。不知道为什么它现在没有。这个“unicode”让我觉得我必须改变“str.split”,但是嗯。等待意见:))
答案 0 :(得分:16)
正如@Abe所提到的,这里的问题是,您正在使用str.split来拆分导致失败的unicode
类型的对象。
您有三种选择
split()
方法即可。这将确保无论对象的类型(str
,unicode
)如何,方法调用都将正确处理它。 unicode.split()
。这适用于unicode
字符串,但对于non-unicode
字符串,这将再次失败。split()
函数调用转换为方法调用,因此无论对象类型如何,都可以透明地调用split()
。当您使用split()
作为回调esp来处理map()
答案 1 :(得分:11)
问题在于str.split
是str
类的方法,但是正在调用unicode
类的对象。使用ipSplit = self.serverVars[0].split('.')
直接调用该方法,使其适用于任何事物(包括str
和unicode
)和split
方法。
答案 2 :(得分:0)
使用isdigit
时,这两种方法均无效。如果您采用类似的解决方案,则可以尝试使用类似于{p>的try
-except
块
try:
output += filter(str.isdigit, some_string)
except TypeError:
output += filter(unicode.isdigit, some_string)