10

えーと、すぐに使えるコードがあり、実際に機能すると確信していますが、次のエラーが発生します。

TypeError:記述子'split'には'str'オブジェクトが必要ですが、'unicode'を受け取りました

それが全体の定義です:

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], '.')

私はそれがコードのせいではないと確信しています、私は以前にそれを試しました(同じスクリプト)そしてそれはうまくいきました。なぜ今はそうならないのか分かりません。そしてこの「ユニコード」は私に「str.split」を変更しなければならないと思わせますが、うーん。意見を待っています:)

4

3 に答える 3

15

@Abeが述べたように、ここでの問題は、str.splitunicodeを使用して、失敗の原因となっているタイプのオブジェクトを分割していることです。

あなたのための3つのオプションがあります

  1. split()この特定のケースでは、オブジェクトのメソッドを呼び出すだけです。これにより、オブジェクトのタイプ(strunicode)に関係なく、メソッド呼び出しでオブジェクトが適切に処理されるようになります。
  2. に電話することもできますunicode.split()。これは文字列ではうまく機能しunicodeますが、non-unicode文字列の場合は再び失敗します。
  3. 最後に、文字列モジュールをインポートして、 string.split関数を呼び出すことができます。この関数は、関数呼び出しをメソッド呼び出しに変換するため、オブジェクトタイプsplit()に関係なく、透過的に呼び出すことができます。split()これは、次のsplit()ような関数へのコールバックespとして使用している場合に役立ちます。map()
于 2012-12-31T07:56:55.330 に答える
12

問題は、それstr.splitがクラスのメソッドであるが、strクラスのオブジェクトに対して呼び出されていることですunicode。でメソッドを直接呼び出して、メソッドを使用ipSplit = self.serverVars[0].split('.')してあらゆるもの (strおよびを含むunicode) に対して機能させるようにしsplitます。

于 2012-12-31T07:14:23.813 に答える