この行
data = get_url_contents(r[0]).encode('ascii', 'ignore')
このエラーが発生します
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11450: ordinal not in range(128)
なんで?「無視」を使用しているため、出力を値に文字列変数に保存するときにデコードエラーが発生することは不可能であると想定しました。
この行
data = get_url_contents(r[0]).encode('ascii', 'ignore')
このエラーが発生します
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11450: ordinal not in range(128)
なんで?「無視」を使用しているため、出力を値に文字列変数に保存するときにデコードエラーが発生することは不可能であると想定しました。
Python 2 の癖によりencode
、バイト文字列 (つまり、既にエンコードされているテキスト) を呼び出すことができます。この場合、最初に ascii でデコードして Unicode オブジェクトに変換しようとします。したがって、get_url_contents がバイト文字列を返す場合、行は効果的にこれを行います。
get_url_contents(r[0]).decode('ascii').encode('ascii', 'ignore')
Python 3 では、バイト文字列にはencode
メソッドがないため、同じ問題が発生すると AttributeError が発生するだけです。
(もちろん、これが問題であることはわかりませんget_url_contents
。関数に関連している可能性があります。しかし、上で説明したことは私の最善の推測です)