"형식 문자열에 대해 충분하지 않은 argumenst"를 발생시키는 로깅 호출을 쉽게 찾을 수 있습니다. 내 워크 스테이션에서 logging/__init__.py
을 수정하여 소스에서 줄을 쉽게 찾을 수 있도록 msg를 인쇄했습니다.파이썬 로깅 라이브러리에서 "충분하지 않은 인수 ..."를 찾는 쉬운 방법
하지만 파이썬 표준 라이브러리를 바꿀 수 없거나 쉽게 pdb를 실행할 수없는 테스트 환경에서해야 할 일이 있습니까?
참고 : 추적 기록은 의미가 없으며 로깅 라이브러리에 의해 구별됩니다. 여기 는 역 추적입니다 :
File "/usr/lib/python2.6/logging/handlers.py", line 71, in emit
if self.shouldRollover(record):
File "/usr/lib/python2.6/logging/handlers.py", line 144, in shouldRollover
msg = "%s\n" % 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 enough arguments for format string
그리고 여기에 알렉스에 의해 제안 오류를
try:
if self.shouldRollover(record):
self.doRollover()
logging.FileHandler.emit(self, record)
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)
솔루션을 잡아 표준 라이브러리의 코드입니다 : 나는의 getMessage 포장 한이를 인쇄 msg와 args. 여기에 코드입니다 : 일반적으로
def print_log_record_on_error(func):
def wrap(self, *args, **kwargs):
try:
return func(self, *args, **kwargs)
except:
import sys
print >>sys.stderr, "Unable to create log message msg=%r, args=%r " % (
getattr(self, 'msg', '?'), getattr(self, 'args', '?'))
raise
return wrap
import logging
logging.LogRecord.getMessage = print_log_record_on_error(logging.LogRecord.getMessage)
이 질문과 게시 솔루션을 이용해 주셔서 감사합니다. "TypeError : 형식 문자열에 대한 인수가 충분하지 않습니다"라는 문제에 직면했을 때 나는 네 번째로 그런 것들을 감지하는 현명한 방법을 찾기 시작했습니다. 귀하의 게시물은 Google 검색 결과의 첫 번째 화면에서 발견되었습니다. 나는이 예외를 처리하고 사용자 코드에서이 문제가 발생하는 위치에 대한 정보를 제공하기 위해 로깅 모듈을 업데이트해야한다고 생각합니다. – vvladymyrov
@vvladymyrov 환영합니다. 코드가 ou에 유용하다는 사실을 알려 주셔서 감사합니다. –