15 Stimmen

Ist es möglich, die String-Interpolation von Python vorübergehend zu deaktivieren?

Ich habe einen Python-Logger eingerichtet, der das Logging-Modul von Python verwendet. Ich möchte die Zeichenfolge, die ich mit dem Logging-Formatter-Objekt in einer Konfigurationsdatei mit dem Modul ConfigParser speichern.

Der Formatstring wird in einem Einstellungswörterbuch in einer separaten Datei gespeichert, die das Lesen und Schreiben der Konfigurationsdatei übernimmt. Das Problem, das ich habe, ist, dass Python immer noch versucht, die Datei zu formatieren, und umkippt, wenn es alle Logging-Modul-spezifischen Formatierungsflags liest.

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

Meine Frage ist einfach: Wie kann ich die Formatierungsfunktion hier deaktivieren, während sie an anderer Stelle erhalten bleibt. Meine erste Reaktion war reichlich Gebrauch von der Backslash, um die verschiedenen Prozentzeichen zu entkommen, aber das natürlich dauerhaft bricht die Formatierung, so dass es nicht funktioniert, auch wenn ich es brauchen.

Ich sollte auch erwähnen, da es in den Kommentaren gekauft wurde, dass ConfigParser einige interne Interpolation tut, die die Stolperstelle verursacht. Hier ist mein 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

Auch allgemeine Hinweise auf gute Praktiken für Einstellungsdateien wären nett. Dies ist das erste Mal, dass ich etwas Bedeutendes mit ConfigParser (oder Protokollierung für diese Angelegenheit) getan habe.

Vielen Dank im Voraus, Dominic

0voto

Fabian Jakobs Punkte 27936

Was ist das Problem mit dem obigen Code? Die Interpolation wird nur durchgeführt, wenn die % Operator auf die Zeichenkette angewendet wird. Wenn Sie nicht % können Sie die Formatierungszeichenfolge wie jede andere Zeichenfolge verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X