디버그할 때만 인쇄 문 사용
요즘 파이썬에서 코딩을 많이 하고 있습니다.그리고 저는 이전에 작업한 적이 없는 데이터로 작업을 해왔습니다. 이전에 본 적이 없는 공식을 사용하고 거대한 파일을 처리했습니다.이 모든 것이 제대로 작동하는지 확인하고 고장 지점을 식별하기 위해 많은 인쇄물을 작성하게 되었습니다.그러나 일반적으로 그렇게 많은 정보를 출력하는 것은 좋은 관행이 아닙니다.디버그하려는 경우에만 인쇄 문을 사용하고 인쇄하지 않으려면 생략하려면 어떻게 해야 합니까?
그 모듈은 당신이 원하는 모든 것을 가지고 있습니다.처음에는 너무 과하게 보일 수 있지만 필요한 부분만 사용하세요.로그 수준을 다음으로 전환하는 데 사용할 것을 권장합니다.stderr
그리고 간단한 로그 방법,debug
,info
,warning
,error
그리고.critical
.
import logging, sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
logging.debug('A debug message!')
logging.info('We processed %d records', len(processed_records))
간단한 방법은 로깅 함수를 호출하는 것입니다.
DEBUG = True
def log(s):
if DEBUG:
print s
log("hello world")
그러면 다음 값을 변경할 수 있습니다.DEBUG
로그를 사용하거나 사용하지 않고 코드를 실행할 수 있습니다.
표준 모듈에는 이를 위한 보다 정교한 메커니즘이 있습니다.
인쇄 대신 로깅 기본 제공 라이브러리 모듈을 사용합니다.
사용자가 생성한 항목Logger
반대 (예:logger
)을 클릭한 다음 디버그 인쇄를 삽입할 때마다 다음을 입력합니다.
logger.debug("Some string")
사용할 수 있습니다.logger.setLevel
프로그램 시작 시 출력 레벨을 설정합니다.DEBUG로 설정하면 모든 디버그가 인쇄됩니다.INFO 이상으로 설정하면 즉시 모든 디버그가 사라집니다.
또한 다양한 수준(INFO, WARNING 및 ERROR)에서 보다 심각한 내용을 기록하는 데 사용할 수 있습니다.
먼저 파이썬의 로깅 프레임워크 지명을 두 번째로 하겠습니다.하지만 사용법에 대해서는 조금 주의해야 합니다.특히, 로깅 프레임워크가 변수를 확장하도록 하십시오. 직접 수행하지 마십시오.예를 들어, 다음 대신:
logging.debug("datastructure: %r" % complex_dict_structure)
다음을 수행해야 합니다.
logging.debug("datastructure: %r", complex_dict_structure)
왜냐하면 그들이 비슷해 보이지만, 첫 번째 버전은 사용할 수 없는 경우에도 repr() 비용이 발생하기 때문입니다.두 번째 버전에서는 이 문제를 방지합니다.마찬가지로, 독자 분이 독자 분의 것을 굴린다면, 저는 다음과 같은 것을 제안할 것입니다.
def debug_stdout(sfunc):
print(sfunc())
debug = debug_stdout
다음을 통해 호출:
debug(lambda: "datastructure: %r" % complex_dict_structure)
다음을 수행하여 사용하지 않도록 설정하면 오버헤드를 방지할 수 있습니다.
def debug_noop(*args, **kwargs):
pass
debug = debug_noop
이러한 문자열을 계산하는 데 드는 오버헤드는 1) 계산 비용이 많이 들거나 2) 디버그 문이 n^3 루프 등의 중간에 있지 않는 한 문제가 되지 않을 수 있습니다.내가 그것에 대해 아무것도 알 수 없다는 것은 아닙니다.
다른 사람들에 대해서는 모르지만, 저는 "지구 상수"를 정의하는 데 사용되었습니다.DEBUG
함수입니다.debug(msg)
될 것입니다.msg
경우에 한하여DEBUG == True
.
그런 다음 디버그 문을 다음과 같이 작성합니다.
debug('My value: %d' % value)
...유닛 테스트를 받고 다시는 이런 짓을 하지 않습니다!:)
코드를 디버깅하는 더 좋은 방법은 모듈 crrprint를 사용하는 것입니다.
매개 변수 debug=True를 전달할 때만 색상 전체 출력을 출력합니다.
from clrprint import *
clrprint('ERROR:', information,clr=['r','y'], debug=True)
언급URL : https://stackoverflow.com/questions/6579496/using-print-statements-only-to-debug
'programing' 카테고리의 다른 글
100% CPU를 사용하는 W3WP.EXE - 어디서부터 시작해야 합니까? (0) | 2023.08.15 |
---|---|
Excel VBA - 코드에서 셀 값 읽기 (0) | 2023.08.15 |
각도: 가져올 수 없음 / (0) | 2023.08.15 |
입력을 클릭할 때와 부트스트랩 모달 창에서 제출 버튼을 누를 때 모두 양식 데이터 제출 (0) | 2023.08.15 |
MariaDB(MySQL)는 왜 숫자 리터럴을 문자열로 취급합니까? (0) | 2023.08.15 |