2016-06-09 9 views
1

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?

+1

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. –

+1

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

Antwort

1

Ich finde die Ursache meines Problems. Irgendwie, in meinem tatsächlichen Code pattern hat Typ unicode anstelle von str, aber in manuellen Tests meine pattern ist nur eine str, die ich eintippe. Dies verursacht die verschiedenen Verhalten ich beobachtet.

Verwandte Themen