Python描述符';拆分';需要一个';str';对象,但收到一个';unicode';
呃,我已经准备好使用代码了,我确信它确实有效,但我得到了以下错误: TypeError:描述符“split”需要一个“str”对象,但收到一个 “unicode” 这就是全部def:Python描述符';拆分';需要一个';str';对象,但收到一个';unicode';,python,Python,呃,我已经准备好使用代码了,我确信它确实有效,但我得到了以下错误: 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
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”,但是,嗯,等待意见:)问题是,
str.split
是str
类的一个方法,但是被调用为unicode
类的一个对象。使用ipSplit=self.serverVars[0].split('.')
直接调用该方法,使用split
方法对任何对象(包括str
和unicode
)进行操作。正如@Abe提到的,这里的问题是,您正在使用它来拆分导致失败的unicode
类型的对象
你有三个选择
split()
方法即可。这将确保无论对象的类型是什么(str
,unicode
),方法调用都能正确处理它李>
unicode.split()
。这对于unicode
string很有效,但是对于non-unicode
string,这将再次失败split()
函数调用转换为方法调用,从而使您能够透明地调用split()
,而不考虑对象类型。当您使用split()
作为对map()
使用
isdigit
时,两种方法都不起作用。如果您使用的是类似的解决方案,则可以尝试try
-,除了类似于
try:
output += filter(str.isdigit, some_string)
except TypeError:
output += filter(unicode.isdigit, some_string)
“我确信它确实有效,但我得到了以下错误”。。恩,所以你确定它不起作用,因为它真的不行。你可以考虑使用<代码> Stult模块。是的,它与第一个选项一起工作,我称之为方法。无论如何谢谢你!第三种选择对我很有用。我倾向于使用一些函数式编程风格。尽管有pylint警告,使用字符串模块还有一个原因。我不明白为什么这是一个问题。当我运行此代码时,它工作正常:>>>u'a.b'。split('.')==>结果是:[u'a',u'b']@DavidMorton是的,您发布的代码应该工作正常。问题在于str.split(u'a.b','.')
。