Al perfilar nuestro código que se sorprendió al descubrir millones de llamadas a
C: \ Python26 \ lib \ codificaciones \ utf_8.py: 15 (recepción)¿Puedo desactivar conversiones unicode de Python implícitas para encontrar mis errores de cadenas mixtas?
empecé depuración y encontró que a través de nuestra base de código que hay muchos pequeños errores, generalmente comparando una cadena a unicode o agregando un sting y un unicode. Python decodifica graciosamente las cadenas y realiza las siguientes operaciones en Unicode.
Qué amable. ¡Pero caro!
soy fluido en Unicode, después de haber leído y Joel SpolskyDive Into Python ...
Trato de mantener nuestras partes internas de código sólo en Unicode.
Mi pregunta - ¿Puedo desactivar este comportamiento pitón de chico bueno? Al menos hasta que encuentre todos estos errores y los arregles (usualmente agregando un u'u ')?
Algunos de ellos son extremadamente difíciles de encontrar (una variable que a veces es una cadena ...).
Python 2.6.5 (y no puedo cambiar a 3.x).
Oh wow. Lo amo. ¿Puedes explicar un poco más cómo 'reload()' hace su magia? ¿Cómo y por qué anula la configuración 'sitecustomize.py'? – jcdyer
En mi Apple Python 2.6 compilación (pero he visto esto en otro lugar ...) 'site.py' (en su dir de lib de std python; ejecutado una vez automágicamente en el inicio de Python) contiene (cerca del final):' if hasattr (sys, "setdefaultencoding"): del sys.setdefaultencoding'. Esto hace que este atributo no esté disponible en 'sys' a menos que elija explícitamente' recargar (sys) '(o descomente la eliminación). Solía estar disponible directamente en Pythons iirc anterior. – ChristopheD
Muy bueno, ¡gracias! Pydev y Pylint te odian, ¡pero funciona! ... y encontré un camión cargado de "errores" en pocos minutos, ¡algunos de ellos en el código fuente de Python! (No son exactamente errores porque el código funciona, simplemente funciona un poco mejor después de solucionarlo). Archivos CSV: split (u '\ t') necesitaba el pequeño 'u'. Las claves del diccionario no son exactamente unicode en 2.6 ... - ¿quién tendría thunk?!?! ¡Gracias! –