Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python描述符';拆分';需要一个';str';对象,但收到一个';unicode';_Python - Fatal编程技术网

Python描述符';拆分';需要一个';str';对象,但收到一个';unicode';

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

呃,我已经准备好使用代码了,我确信它确实有效,但我得到了以下错误:

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

问题是,
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','.')