2012-06-21 3 views
2

Я установил регистрацию, как показано нижепитона ввиду Джанго вызывает TypeError

import logging 

logging.basicConfig(
    level = logging.DEBUG, 
    format = '%(asctime)s %(levelname)s %(message)s', 
) 

logger = logging.getLogger('myapp.views') 

def my_view(request): 
    ... 
    try: 
     parse_file_using_regex(file): 
     ... 
    except IndexError as ie: 
     logger.debug('content of file not proper:',ie) 
    except ValueError as ve: 
     logger.debug('caused value error') 

Когда происходит valuError, я получаю следующий вывод

...Traceback (most recent call last): 
    File "/usr/lib/python2.6/logging/__init__.py", line 768, in emit 
    msg = self.format(record) 
    File "/usr/lib/python2.6/logging/__init__.py", line 648, in format 
    return fmt.format(record) 
    File "/usr/lib/python2.6/logging/__init__.py", line 436, in format 
    record.message = record.getMessage() 
    File "/usr/lib/python2.6/logging/__init__.py", line 306, in getMessage 
    msg = msg % self.args 
TypeError: not all arguments converted during string formatting 
....Traceback (most recent call last): 
    File "/usr/lib/python2.6/logging/__init__.py", line 768, in emit 
    msg = self.format(record) 
    File "/usr/lib/python2.6/logging/__init__.py", line 648, in format 
    return fmt.format(record) 
    File "/usr/lib/python2.6/logging/__init__.py", line 436, in format 
    record.message = record.getMessage() 
    File "/usr/lib/python2.6/logging/__init__.py", line 306, in getMessage 
    msg = msg % self.args 
TypeError: not all arguments converted during string formatting 
2012-06-21 09:13:47,909 DEBUG caused value error 

Может кто-нибудь помочь мне понять это? Почему я получаю TypeError?

с использованием PDB, и в том числе следующие в getMessage(self) из python2.6/протоколирования/INIT .py

import pdb 
pdb.set_trace() 
print msg,sef.args 

...> /usr/lib/python2.6/logging/__init__.py(307)getMessage() 
-> print msg,sef.args 
(Pdb) msg 
'parsing subtitle file:' 
(Pdb) self.args 
('/home/me/dev/python/django/myapp/media/testpath/testfile.srt',) 
(Pdb) 
+0

можно напечатать значения MSG и self.args? просто зайдите в файл «/usr/lib/python2.6/logging/__init__.py», напишите «import pdb; pdb.set_trace(); напечатайте сообщение msg, self.args» в строке 305 и запустите его снова – Hassek

+0

У меня есть обновил вопрос с результатами вышеизложенного – damon

ответ

1

Вы должны добавить к вашему лесозаготовительной сообщение значения% с, так что было бы, как это :

logger.debug('content of file not propper: %s', ie) 

Я использовал регистратор по-другому тоже, просто добавив сообщение прямо так:

logger.debug('content of file not propper: %s' % ie) 

, который мне кажется намного более прямым.

О PDB, это действительно хороший способ для отладки программы, я рекомендую это 100% :)

+0

благодарит за помощь – damon

Смежные вопросы