嗯,我有现成的代码,我确信它确实有效,但我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
ipSplit = str.split(self.serverVars[0], '.')
Run Code Online (Sandbox Code Playgroud)
我确定这不是因为代码,我之前尝试过(相同的脚本)并且它有效.不知道为什么它现在没有.这个"unicode"让我觉得我必须改变"str.split",但是嗯.等待意见:)
Abh*_*jit 16
正如@Abe所提到的,这里的问题是,你使用str.split来分割unicode导致失败的类型的对象.
有三种选择
split()该对象的方法即可.这将确保无论对象(str,unicode)的类型如何,方法调用都将正确处理它.unicode.split().这适用于unicode字符串,但对于non-unicode字符串,这将再次失败.split()函数调用转换为方法调用,从而使您可以透明地调用split()对象类型.当你使用split()as回调esp函数时,这是有益的map()Abe*_*lus 12
问题是这str.split是str类的一个方法,但是正在为unicode类的对象调用.直接调用该方法,ipSplit = self.serverVars[0].split('.')使其适用于任何(包括str和unicode)split方法.