auslösen Ich habe dieses Stück Code, der aus einem Gunzip-Stream liest und überprüft, ob jede Zeile ein Muster enthält. Was ich habe, istWann Python UnicodeDecodeError bei der Suche in Zeichenfolge
if (pattern in line):
do_something()
Einige Zeilen enthalten Nicht-ASCII-Zeichen, wenn mein Code diese Zeilen erreicht, ich UnicodeDecodeError bekommen. Ich kann diesen Fehler in meinen manuellen Tests jedoch nicht reproduzieren. Wenn ich den Ausdruck der Zeile kopieren, die UnicodeDecodeError verursacht, und sie der Variablen line
zuweisen und pattern in line
tun, bekomme ich False
anstelle eines Fehlers. Ich bin verwirrt über diese Inkonsistenz. Warum verhält es sich für dieselbe Zeichenfolge anders?
Weil 'repr (some_string)' nicht das gleiche wie 'some_string' ist, ist es eine Darstellung davon. Für einige Typen wird versucht, eine Repräsentation zu geben, die verwendet werden kann, um eine neue Instanz des Typs zu konstruieren, wenn sie als Eingabe für einen Interpreter oder als Code, aber nicht für alle gegeben wird. Siehe http://stackoverflow.com/questions/7784148/understanding-repr-function-in-python. –
Beiseite: Wenn Sie ein Anfänger sind, sollten Sie wahrscheinlich Python 3 anstelle von Python 2 verwenden. Unicode insbesondere wird viel besser behandelt, und während es noch einige Sachen gibt, müssen Sie wenigstens lernen, was Sie lernen werden, macht Sinn . – DSM