반응형
디버깅 수행하기
- 파이썬 디버깅은 오류를 찾아내고 수정하는 과정입니다.
* 아래 각 함수에 대한 포스트를 작성할 예정입니다.
1. Print 문을 이용한 디버깅
- Print 문을 이용하여 변수의 값을 출력하고 프로그램의 흐름을 추적할 수 있습니다.
- 가장 간단한 디버깅 방법입니다.
def add(a, b):
print(f"a: {a}, b: {b}")
return a + b
result = add(5, 10)
print(f"Result: {result}")
- 이 코드에서는 add 함수가 호출될 때 a와 b의 값을 출력합니다.
- 결과값도 출력하여 중간 값과 최종 결과를 확인할 수 있습니다.
2. try-except 블록을 이용한 예외 처리
- 예외가 발생할 수 있는 부분을 try 블록으로 감싸고, 예외가 발생했을 때 어떻게 처리할지 except 블록에서 정의합니다.
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
- 이 코드에서는 0으로 나누는 연산에서 발생하는 ZeroDivisionError를 잡아내고, 예외 메시지를 출력합니다.
3. assert 문을 이용한 조건 검증
- assert 문을 사용하여 특정 조건이 참인지 확인합니다.
- 조건이 거짓이면 AssertionError가 발생합니다.
def divide(a, b):
assert b != 0, "b cannot be zero"
return a / b
divide(10, 0)
- 이 코드에서는 b가 0이 아닌지 확인하고, 0일 경우 "b cannot be zero" 메시지와 함께 AssertionError를 발생시킵니다.
4. pdb 모듈을 이용한 단계별 디버깅
- pdb 모듈을 사용하여 코드 실행을 중단하고 인터랙티브 디버깅을 수행할 수 있습니다.
import pdb
def multiply(a, b):
pdb.set_trace()
return a * b
result = multiply(3, 4)
print(result)
- 이 코드에서는 pdb.set_trace()를 호출하여 코드 실행을 중단하고, 변수 값을 확인하거나 코드의 흐름을 단계별로 추적할 수 있습니다.
5. logging 모듈을 이용한 로그 기록
- logging 모듈을 사용하여 다양한 수준의 로그 메시지를 기록할 수 있습니다.
- 디버깅 정보를 남기고 추적하는 데 유용합니다.
import logging
logging.basicConfig(level=logging.DEBUG)
def subtract(a, b):
logging.debug(f"subtracting {b} from {a}")
return a - b
subtract(10, 3)
- 이 코드에서는 logging.debug()를 사용하여 함수 실행 시 디버깅 정보를 기록합니다. 로그 레벨을 DEBUG로 설정하여 디버깅 메시지를 출력합니다.
6. IDE의 디버깅 도구 사용 (예: PyCharm)
- IDE에서 제공하는 디버깅 도구를 사용하면 브레이크포인트 설정, 변수 값 확인, 코드 흐름 제어 등을 직관적으로 할 수 있습니다.
PyCharm의 Breakpoint 설정 및 step-by-step 디버깅 기능을 사용하여 코드의 흐름을 추적합니다.
- 디버깅하려는 코드 줄에 브레이크포인트를 설정합니다.
- 디버그 모드로 실행합니다.
- 브레이크포인트에 도달하면 변수 값을 확인하고, 코드 흐름을 제어할 수 있습니다.
7. IPython의 %debug 매직 명령어
- IPython에서 제공하는 %debug 매직 명령어를 사용하여 예외 발생 시 디버깅 모드로 들어갈 수 있습니다.
def add(a, b):
return a + b
result = add(1, 'two')
# IPython에서 실행 후 %debug 입력
- 이 코드를 실행한 후 IPython에서 %debug 명령어를 입력하면, 예외가 발생한 지점에서 디버깅 모드로 들어가 변수 값을 확인하고 문제를 추적할 수 있습니다.
8. trace 모듈을 이용한 실행 흐름 추적
- trace 모듈을 사용하여 코드의 실행 흐름을 추적할 수 있습니다. 함수 호출, 줄별 실행 등을 추적합니다.
import trace
def greet(name):
print(f"Hello, {name}!")
tracer = trace.Trace()
tracer.run('greet("Alice")')
- 이 코드에서는 trace.Trace()를 사용하여 greet 함수의 호출과 실행 흐름을 추적합니다.
- 출력된 정보를 통해 코드의 실행 순서를 확인할 수 있습니다.
9. unittest 모듈을 이용한 테스트와 디버깅
- unittest 모듈을 사용하여 함수나 모듈에 대한 단위 테스트를 작성하고, 테스트를 통해 디버깅을 수행할 수 있습니다.
import unittest
def multiply(a, b):
return a * b
class TestMath(unittest.TestCase):
def test_multiply(self):
self.assertEqual(multiply(3, 4), 12)
self.assertEqual(multiply(2, 5), 10)
if __name__ == '__main__':
unittest.main()
- 이 코드는 unittest 모듈을 사용하여 multiply 함수에 대한 테스트 케이스를 작성합니다.
- unittest.main()을 실행하여 테스트를 수행하고, 실패한 테스트를 통해 문제를 찾습니다.
10. cProfile 모듈을 이용한 성능 분석
- cProfile 모듈을 사용하여 코드의 성능을 분석하고, 어느 부분이 성능을 저하시킬 수 있는지 확인할 수 있습니다.
import cProfile
def slow_function():
total = 0
for i in range(10000):
total += i
return total
cProfile.run('slow_function()')
- 이 코드에서는 cProfile.run()을 사용하여 slow_function의 실행 성능을 분석합니다.
- 실행 시간을 측정하고, 성능 저하가 발생하는 부분을 식별할 수 있습니다.
반응형
'개발 > Python' 카테고리의 다른 글
[파이썬, Python] assert 활용법 총정리 (0) | 2024.07.17 |
---|---|
[파이썬, Python] 제너레이터 활용법 총정리 (0) | 2024.07.15 |
[파이썬, Python] 코드 최적화 예시 총정리 (2) | 2024.07.14 |
[파이썬, Python] if __name__ == "__main__": 총정리 (0) | 2024.07.12 |
[파이썬, Python] 터미널 명령어 실행하기 (0) | 2024.07.12 |