Podczas profilowania kodu Byłem zaskoczony, aby znaleźć miliony wezwań do
C: \ Python26 \ lib \ kodowania \ utf_8.py: 15 (dekodowania)Czy mogę wyłączyć niejawne konwersje Unicode w Pythonie, aby znaleźć błędy w mieszanych łańcuchach?
zacząłem debugowanie i okazało się, że w całej naszej bazie kodu istnieją wiele drobnych błędów, zazwyczaj porównywanie napisów do unikodu lub dodawanie żądań i unikodu. Python łaskawie dekoduje łańcuchy i wykonuje następujące operacje w unicode.
Jak miło. Ale drogi!
jestem biegły w Unicode, po przeczytaniu Joel Spolsky i Dive Into Python ...
staram się utrzymać nasze wewnętrzne kodu tylko w Unicode.
Moje pytanie - czy mogę wyłączyć to pytone zachowanie miłego faceta? Przynajmniej dopóki nie znajdę tych wszystkich błędów i nie naprawię ich (zazwyczaj przez dodanie "u'u")?
Niektóre z nich są niezwykle trudne do znalezienia (zmienna, która jest czasem ciąg ...).
Python 2.6.5 (i nie mogę zmienić na 3.x).
Oh wow. Kocham to. Czy możesz wyjaśnić nieco więcej, jak 'reload()' robi swoją magię? W jaki sposób i dlaczego niweluje ustawienie 'sitecustomize.py'? – jcdyer
W mojej kompilacji Apple Python 2.6 (ale widziałem to gdzie indziej ...) 'site.py' (w twoim std python lib dir; wykonywane raz automagicznie przy starcie Pythona) zawiera (pod koniec):' if hasattr (sys, "setdefaultencoding"): del sys.setdefaultencoding'. To sprawia, że ten atrybut jest niedostępny w 'sys', chyba że wyraźnie wybierzesz' reload (sys) '(lub odkomentuj usuwanie). Kiedyś był dostępny bezpośrednio we wcześniejszych wersjach Pythona iirc. – ChristopheD
Bardzo fajnie - dziękuję! Pydev i Pylint cię nienawidzą, ale działa! ... i znalazłem ciężarówkę "błędów" w kilka minut, niektóre z nich w kodzie źródłowym Pythona! (Nie są to dokładnie błędy, ponieważ kod działa, po poprawieniu działa trochę lepiej). Pliki CSV: split (u '\ t') potrzebowały małego "u". Klucze do słownika nie są dokładnie Unicode w 2.6 ... - którzy mieliby thunk?!?! Dziękujemy! –