Ho configurato un logger python, usando il modulo di registrazione di python. Voglio memorizzare la stringa che sto usando con l'oggetto di formattazione della registrazione in un file di configurazione usando il modulo ConfigParser.È possibile disabilitare temporaneamente l'interpolazione delle stringhe di Python?
La stringa di formato è memorizzata in un dizionario di impostazioni in un file separato che gestisce la lettura e la scrittura del file di configurazione. Il problema che ho è che python tenta ancora di formattare il file e cade quando legge tutti i flag di formattazione specifici del modulo di log.
{
"log_level":logging.debug,
"log_name":"C:\\Temp\\logfile.log",
"format_string":
"%(asctime)s %(levelname)s: %(module)s, line %(lineno)d - %(message)s"
}
La mia domanda è semplice: come posso disabilitare qui la funzionalità di formattazione mantenendola altrove. La mia reazione iniziale è stata l'uso copioso del backslash per sfuggire ai vari simboli delle percentuali, ma questo naturalmente rompe in modo permanente la formattazione in modo che non funzioni anche quando ne ho bisogno.
Vorrei anche menzionare, poiché è stato acquistato nei commenti, che ConfigParser esegue un'interpolazione interna che causa il trip-up. Ecco il mio traceback:
Traceback (most recent call last):
File "initialconfig.py", line 52, in <module>
"%(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
Inoltre, le indicazioni generali su buone pratiche di file di impostazioni sarebbero buone. Questa è la prima volta che faccio qualcosa di significativo con ConfigParser (o registro per quella materia).
Grazie in anticipo, Dominic
interpolazione? Penso che la parola giusta sarebbe la formattazione –
@Edison: No, in Python si chiama anche interpolazione. http://docs.python.org/library/stdtypes.html#string-formatting-operations –
I'm confused - la formattazione si verifica solo quando si chiede esplicitamente di farlo tramite '%' [o 'string.substitute () ']. –