¿Es posible desactivar temporalmente la interpolación de cadenas de Python?

Tengo un registrador de Python configurado, usando el módulo de registro de python. Quiero almacenar la cadena que estoy usando con el objeto Formateador de registro en un archivo de configuración usando el módulo ConfigParser.

La cadena de formato se almacena en un diccionario de configuraciones en un archivo separado que maneja la lectura y escritura del archivo de configuración. El problema que tengo es que Python aún intenta formatear el archivo y se cae cuando lee todos los indicadores de formato específicos del módulo de registro.

{ "log_level":logging.debug, "log_name":"C:\\Temp\\logfile.log", "format_string": "%(asctime)s %(levelname)s: %(module)s, line %(lineno)d - %(message)s" } 

Mi pregunta es simple: ¿cómo puedo deshabilitar la funcionalidad de formato aquí y mantenerla en otro lugar? Mi reacción inicial fue el uso copioso de la barra invertida para escapar de los diversos símbolos de porcentaje, pero eso, por supuesto, rompe el formato de manera tal que no funcionará incluso cuando lo necesito.

También debo mencionar, ya que fue comprado en los comentarios, que ConfigParser hace alguna interpolación interna que causa el disparo. Aquí está mi rastro:

 Traceback (most recent call last): File "initialconfig.py", line 52, in  "%(asctime)s %(levelname)s: %(module)s, line %(lineno)d - %(message)s" File "initialconfig.py", line 31, in add_settings self.set(section_name, setting_name, default_value) File "C:\Python26\lib\ConfigParser.py", line 668, in set "position %d" % (value, m.start())) ValueError: invalid interpolation syntax in '%(asctime)s %(levelname)s: %(module )s, line %(lineno)d - %(message)s' at position 10 

Además, los indicadores generales sobre buenas prácticas de configuración de archivos serían agradables. Esta es la primera vez que hago algo significativo con ConfigParser (o registro para esa materia).

    Gracias de antemano, Dominic

    ¿Intentaste escapar los porcentajes con %% ?

    Es posible que ConfigParser.RawConfigParser utilizar ConfigParser.RawConfigParser lugar de ConfigParser.ConfigParser . Solo este último hace interpolación mágica en los valores de configuración.

    EDITAR:

    En realidad, al utilizar ConfigParser.SafeConfigParser , podrá escapar de las cadenas de formato con un % signo adicional. Este ejemplo debería estar funcionando entonces:

     { "log_level":logging.debug, "log_name":"C:\\Temp\\logfile.log", "format_string": "%%(asctime)s %%(levelname)s: %%(module)s, line %%(lineno)d - %%(message)s" } 

    Hay RawConfigParser que es como ConfigParser sin el comportamiento de interpolación. Si no usa la función de interpolación en ninguna otra parte del archivo de configuración, simplemente puede reemplazar ConfigParser con RawConfigParser en su código.

    Consulte la documentación de RawConfigParser para obtener más detalles.

    También puede utilizar el conjunto de interpolación en None .

     config = ConfigParser(strict=False, interpolation=None) 

    (Estoy usando Python 3.6.0 )

    ¿Cuál es el problema con el código anterior? La interpolación solo se realiza si el operador % se aplica a la cadena. Si no usa % , puede usar la cadena de formato como cualquier otra cadena.

    ¿Qué versión de Python estás usando? Una actualización a 2.6.4 puede ayudar, vea

    http://bugs.python.org/issue5741