2012-04-14 5 views
2

私はユニコード文字列を含む2つのリストを持っています。私もrecentsongsに表示availablesongsからすべての要素を削除しようとしている。ユニコード文字列を含むリストでremove()を呼び出すときにPythonがUnicodeWarningを出す

次のコードは、(例外条項は、デバッグのためにコメントアウト)問題を引き起こしている:

for x in recentsongs: 
    #try: 
     availablesongs.remove(x) 
    #except ValueError: 
    # pass 

このコードは、リストは、ASCII文字列だけが含まれている場合正常に動作しますが、他の言語の文字が導入されている場合、それは失敗:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 
    availablesongs.remove(x) 
ValueError: list.remove(x): x not in list 

エラーは、私に困惑しているremove()関数自体から発生しています。これを回避するにはどうしたらいいですか?私はどうなるのか

+2

[完全な回答を投稿するには怠惰です] –

+0

すべてをユニコードに変換するか、すべてを同じエンコードに変換します。ユニコードとエンコードされたテキストを混在させないでください。 – agf

+0

[ありがとう...](このページは、http://stackoverflow.com/questions/10149850/python-giving-unicodewarning-when-calling-remove-on-a-list-containing-unicode#comment13016466_10149850) ://farmdev.com/talks/unicode/)本当に私の問題を解決するのに役立ちました。関数 "to_unicode_or_bust"が機能し、あらかじめ配列全体を反復処理する追加関数を書きました。 – okw

答えて

0

はos.listdir()は私の問題のいくつかを引き起こしていました。関数to_unicode_or_bustは、残りの部分を修正するために機能します。

0

:それは時々、Unicode文字列を返し、時にはないので

list(set(availablesongs)-set(recentsongs)) 
+0

私はこれを試したことはありませんが、注文が重要だった場合には悪くなるリストの注文を失うようです。 – okw

関連する問題