2011-08-24 14 views
5

Sto cercando un modo per eseguire una formattazione di stringa parziale nei programmi di registrazione di Python.

Quando si cerca di definire un formattatore seguente modo:
Formattazione di stringhe parziali nei formattori di registrazione Python

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

mi metterò un TypeError con "formato richiede una mappatura" che è ragionevole come l'interprete non riusciva a trovare 'levelName' e 'Messaggio'.

Ovviamente, vorrei che sia "levelname" che "message" non siano formattati per il framework di registrazione da gestire.

come la vedo io, ci sono altri due modi di affrontare la questione:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

Tuttavia, ritengo che entrambe le soluzioni un po 'brutto, e non ci credo deve essere un modo migliore per formattare solo parte della stringa - in Python, o utilizzando il framework di registrazione incorporato di python.

Qualche idea?

+0

duplicato di http://stackoverflow.com/questions/4928526/python-format-string – Stefano

risposta

5

Prova questo:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,)) 

devi dare il metodo Formatter la stringa con %(...)s campi. %% interpreterà in % e pertanto può essere utilizzato.

+0

Funziona alla grande, grazie! – amito

Problemi correlati