2012-06-21 45 views
2

我設置的記錄如下Python記錄引起類型錯誤

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,幷包括python2.6的/記錄的getMessage(self)以下/ 初始化的.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

你可以打印味精和self.args值?只需轉到「/usr/lib/python2.6/logging/__init__.py」文件,在第305行中寫入「import pdb; pdb.set_trace(); print msg,self.args」並再次運行它 – 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