PySnooper에서 print를 사용하여 디버깅을 영원히 하지 말라는 문제
이제 Pysnooper가 생겼습니다. 그렇게 복잡한 Debug 도구를 설정하지 않아도 전체 코드에 대한 분석을 완성할 수 있습니다.그것은 어떤 코드가 실행 중인지, 그리고 국부 변수의 값이 무엇인지 알려줄 수 있습니다.
사실, Pysnooper는 한 줄 한 줄 print의 반복적인 작업을 대체하고 코드에 pysnooper 장식기를 줍니다. 문장과 변수를 자동으로 식별하고 그 값을 print할 수 있습니다.
import pysnooper
@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]
number_to_bits(6)
효과는 다음과 같습니다.
Source path:... 1.py
Starting var:.. number = 6
23:03:35.990701 call 4 def number_to_bits(number):
23:03:35.991699 line 5 if number:
23:03:35.991699 line 6 bits = []
New var:....... bits = []
23:03:35.991699 line 7 while number:
23:03:35.991699 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 3
New var:....... remainder = 0
23:03:35.991699 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
23:03:36.004664 line 7 while number:
23:03:36.005661 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
23:03:36.005661 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
23:03:36.007657 line 7 while number:
23:03:36.007657 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
23:03:36.008655 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
23:03:36.008655 line 7 while number:
23:03:36.009651 line 10 return bits
23:03:36.009651 return 10 return bits
Return value:.. [1, 1, 0]
Elapsed time: 00:00:00.020945
모든 줄 변수의 값을 화면에 출력해서 코드를 디버깅할 수 있습니다.코드 한 줄만 쓰면 장식기를 사용하면 이 편리한 디버깅 기능을 실현할 수 있으며, 한 줄로 print를 쓰는 것보다 훨씬 편리하다.
0. 설치 모듈
이 모듈을 사용하면 Pip을 사용하여 PySnooper를 설치하면 됩니다.
pip install pysnooper
다음은 이 모듈의 다른 유용한 기능에 대해 설명합니다.1. 로그 파일 지원
만약 print를 화면에 출력하는 것이 불편하다면, 로그 파일에 출력할 수 있습니다. 장식기 줄을 다음과 같이 바꾸기만 하면 됩니다.
@pysnooper.snoop('/my/log/file.log')
2. 외부 변수 또는 다른 표현식 읽기장식기의 작용 범위 이외의 변수나 표현식 값을 읽으려면watch 매개 변수를 사용할 수 있습니다.
@pysnooper.snoop(watch=('foo.bar', 'self.x["whatever"]'))
3. 장식기를 사용하지 않으려면 상하문 형식으로 디버깅할 수도 있다맞아요. 장식기는 한정된 사용 조건이 있어서 사용하기에 한계가 있기 때문에pysnooper는 with의 상하문 형식을 지원합니다.
import pysnooper
import random
def foo():
lst = []
for i in range(10):
lst.append(random.randrange(1, 1000))
with pysnooper.snoop():
lower = min(lst)
upper = max(lst)
mid = (lower + upper) / 2
print(lower, mid, upper)
foo()
아래와 같은 효과는 컨텍스트의 코드만 디버깅됩니다.
New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line 10 lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line 11 upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line 12 mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line 13 print(lower, mid, upper)
Elapsed time: 00:00:00.000344
우리가 일부 코드만 디버깅할 때, 이 상하문 형식의 디버깅 방법은 매우 편리하다.그 밖에 Pysnooper는 더욱 강력한 사용법을 가지고 있습니다. 여러분은 그들의 고급 사용 문서를 볼 수 있습니다.
https://github.com/cool-RR/PySnooper/blob/master/ADVANCED_USAGE.md
PySnooper에서 영원히 print로 디버깅하지 말라는 글을 소개합니다. 더 많은 Pysnooper print 디버깅 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 찾아보세요. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 인쇄 PDF 파일Java 언어를 사용하여 다양한 시나리오에 대해 프로그래밍 방식으로 PDF 파일을 쉽게 인쇄할 수 있습니다. Spire.PDF에는 프린터 이름 지정, 인쇄 범위 설정, 양면 인쇄 및 사용자 정의 용지 크기 인쇄와 같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.