Python - 描述符'split'需要一个'str'对象但是收到'unicode'

时间:2012-12-31 07:11:20

标签: 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(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”,但是嗯。等待意见:))

3 个答案:

答案 0 :(得分:16)

正如@Abe所提到的,这里的问题是,您正在使用str.split来拆分导致失败的unicode类型的对象。

您有三种选择

  1. 在这种特殊情况下,您只需为对象调用split()方法即可。这将确保无论对象的类型(strunicode)如何,方法调用都将正确处理它。
  2. 您也可以致电unicode.split()。这适用于unicode字符串,但对于non-unicode字符串,这将再次失败。
  3. 最后,您可以导入string模块并调用string.split功能。此函数将split()函数调用转换为方法调用,因此无论对象类型如何,都可以透明地调用split()。当您使用split()作为回调esp来处理map()
  4. 等函数时,这非常有用

答案 1 :(得分:11)

问题在于str.splitstr类的方法,但是正在调用unicode类的对象。使用ipSplit = self.serverVars[0].split('.')直接调用该方法,使其适用于任何事物(包括strunicode)和split方法。

答案 2 :(得分:0)

使用isdigit时,这两种方法均无效。如果您采用类似的解决方案,则可以尝试使用类似于{p>的try-except

try:
    output += filter(str.isdigit, some_string)
except TypeError:
    output += filter(unicode.isdigit, some_string)