chardet.detectでWarning

あるプロジェクトでテスト実行したら以下のようなwarningが出てたので、発生箇所を調べた

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if aBuf[:len(chunk)] == chunk:

ソース追っかけて行くと、unicode型に対してchardet.detectが呼ばれてそうな箇所があった。

シンプルにするとこれで再現する

# coding=utf-8
import chardet

encoding = chardet.detect(u"あいうえお")
print encoding

どうしてこんなことになってるのかわからないけど、unicode型に対してchardet.detectする意味がないと思われるので、unicode型の場合は該当箇所を通らないようにしたらwarningは出力されなくなった。

ちなみにwarningが出力されるだけでエラーにはならず、結果としてencodingはasciiとして判定される。

上記の実行結果

{'confidence': 1.0, 'encoding': 'ascii'}

chardet 2.1.1 : Python Package Index