> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬을 디버깅하는 방법?

파이썬을 디버깅하는 방법?

青灯夜游
풀어 주다: 2020-09-17 16:13:24
원래의
16385명이 탐색했습니다.

프로그램을 한 번 작성하고 정상적으로 실행될 확률은 기본적으로 1%를 넘지 않을 정도로 매우 작습니다. 수정해야 할 다양한 버그가 항상 존재합니다. 어떤 버그는 아주 간단합니다. 어떤 버그는 매우 복잡합니다. 따라서 어떤 변수가 올바른 값을 가지고 있는지, 어떤 변수가 잘못된 값을 가지고 있는지를 알아야 합니다. 버그를 수정하기 위해 프로그램을 디버깅하는 완전한 수단입니다. 다음 글에서는 Python 디버깅 방법을 소개하겠습니다. 도움이 되길 바랍니다.

파이썬을 디버깅하는 방법?

방법 1: print

print를 사용하여 문제가 있을 수 있는 변수를 인쇄하세요. 이 방법은 가장 간단하고 직접적이며 조잡하고 효과적입니다.

# err.py
def foo(s):
  n = int(s)
  print '>>> n = %d' % n
  return 10 / n

def main():
  foo('0')

main()
로그인 후 복사

실행 후 출력에서 ​​인쇄된 변수 값 찾기:

$ python err.py
>>> n = 0
Traceback (most recent call last):
 ...
ZeropisionError: integer pision or modulo by zero
로그인 후 복사

print 사용의 가장 큰 단점은 나중에 삭제해야 한다는 점입니다. 프로그램 곳곳에 인쇄가 있다는 점과 실행 중입니다. 결과에는 정크 정보도 많이 포함됩니다.

방법 2: Assert

보기를 돕기 위해 print를 사용하는 경우 대신 Assertion을 사용할 수 있습니다.

# err.py
def foo(s):
  n = int(s)
  assert n != 0, 'n is zero!'
  return 10 / n

def main():
  foo('0')
로그인 후 복사

assert는 표현식 n != 0이 True여야 함을 의미합니다. 그렇지 않으면 다음 코드가 잘못됩니다.

어설션이 실패하면 Assertion 문 자체에서 AssertionError가 발생합니다.

$ python err.py
Traceback (most recent call last):
 ...
AssertionError: n is zero!
로그인 후 복사

프로그램이 어설션으로 가득 차 있으면 인쇄하는 것보다 낫지 않습니다. 그러나 -O 매개변수를 사용하면 Python 인터프리터를 시작할 때 어설션을 끌 수 있습니다.

$ python -O err.py
Traceback (most recent call last):
 ...
ZeropisionError: integer pision or modulo by zero
로그인 후 복사

어설션을 끄면 모든 어설션 문을 통과한 것으로 볼 수 있습니다.

방법 3: 로깅

인쇄를 로깅으로 바꿀 수도 있습니다. 어설션과 비교하면 로깅은 오류를 발생시키지 않으며 파일로 출력할 수 있습니다.

# err.py
import logging

s = '0'
n = int(s)
logging.info('n = %d' % n)
print 10 / n
로그인 후 복사

logging.info()는 다음과 같은 내용을 출력할 수 있습니다. 텍스트. 실행해 보면 ZeropisionError 외에는 정보가 없는 것을 확인할 수 있습니다. 무슨 일이야?

걱정하지 마세요. 로깅을 가져온 후 구성 줄을 추가하고 다시 시도하세요.

import logging
logging.basicConfig(level=logging.INFO)
로그인 후 복사

출력 보기:

$ python err.py
INFO:root:n = 0
Traceback (most recent call last):
 File "err.py", line 8, in <module>
  print 10 / n
ZeropisionError: integer pision or modulo by zero
로그인 후 복사

이것이 로깅의 이점입니다. 디버그를 포함한 로깅 정보 수준을 지정할 수 있습니다. , 정보, 경고, 오류 및 기타 수준을 level=INFO로 지정하면 login.debug가 작동하지 않습니다. 같은 방식으로 level=WARNING을 지정한 후에는 디버그 및 정보가 작동하지 않습니다. 이런 방식으로 다양한 수준의 정보를 삭제하지 않고도 안전하게 출력할 수 있으며 최종적으로 어떤 수준의 정보가 출력되는지 제어할 수 있습니다.

로깅의 또 다른 이점은 간단한 구성을 통해 명령문을 콘솔, 파일 등 여러 위치에 동시에 출력할 수 있다는 것입니다.

방법 4: 디버거 pdb

Python 디버거 pdb를 시작하고 프로그램을 단일 단계 모드에서 실행하면 언제든지 실행 상태를 확인할 수 있습니다. 먼저 프로그램을 준비합니다:

# err.py
s = &#39;0&#39;
n = int(s)
print 10 / n
로그인 후 복사

다음 시작:

$ python -m pdb err.py
> /Users/michael/Github/sicp/err.py(2)<module>()
-> s = &#39;0&#39;
로그인 후 복사

-m pdb 매개변수로 시작한 후, pdb는 다음에 실행될 코드를 찾습니다 -> 코드를 보려면 l 명령을 입력하세요.

(Pdb) l
 1   # err.py
 2 -> s = &#39;0&#39;
 3   n = int(s)
 4   print 10 / n
[EOF]
로그인 후 복사

코드를 단계별로 보려면 n 명령을 입력하세요.

(Pdb) n
> /Users/michael/Github/sicp/err.py(3)<module>()
-> n = int(s)
(Pdb) n
> /Users/michael/Github/sicp/err.py(4)<module>()
-> print 10 / n
로그인 후 복사

언제든지 p 변수 이름 명령을 입력하여 변수를 볼 수 있습니다.

(Pdb) p s
&#39;0&#39;
(Pdb) p n
0
로그인 후 복사

q 명령을 입력하여 코드를 확인하세요. 디버깅을 끝내고 프로그램 종료하기:

(Pdb) n
ZeropisionError: &#39;integer pision or modulo by zero&#39;
> /Users/michael/Github/sicp/err.py(4)<module>()
-> print 10 / n
(Pdb) q
로그인 후 복사

pdb를 통해 명령줄에서 디버깅하는 이 방법은 이론적으로는 보편적이지만 코드가 천 줄이면 999줄까지 실행하려면 몇 개의 명령을 입력해야 하는지 정말 번거롭습니다. .

요약

프로그램 작성에서 가장 괴로운 것은 디버깅입니다. 실행될 것으로 예상했던 명령문이 전혀 실행되지 않는 경우가 종종 있습니다. 필요합니다.

관련 학습 권장 사항: python 튜토리얼

위 내용은 파이썬을 디버깅하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿