반응형
☢️ 버그 : 코드가 원하는 대로 동작하지 않는 경우
- 프로그램이 죽는 (크래시가 발생하는) 경우
- 예상한 속도보다 훨씬 느리게 동작하는 경우
- 잘못된결과를 출력하는 경우
- 코드 설계 상 일어나면안되는 상황이 일어난 경우
⛔️ 예외 : 일반적이지 않은 코드의 동작
- 사용자가 프로그램을 강제 종료하는 경우
- 분수 분모에 0이 들어가는 경우
- 열고자 하는 파일이 존재하지않는 경우
- 인터넷이 불안정한 경우
🐞 디버깅 : 사용/테스트 중 찾아낸 버그를 없애 나가는 과정
- 버그의 원인을 찾는다
- 발생한 버그를 해결한다
- 비슷한 버그의 재발을 방지한다
원인 찾기 : 어떤 상황에서, 빈도는 얼마나, 에러 메세지가 있다면 무엇인지
해결 : 원인 해결, 새로운 코드가 일으킬 버그가 있는지
재발 방지 : 버그를 일으킨 코드가 다른 곳에서 사용되는가, 비슷한 설계를 이용한 다른 코드는 없는가
고친 코드의 약점은 없는가, 코드를 지속적으로 검증할 방법은 무엇인가
📑 에러 메세지 읽는 법
def greeting(your_name):
print("Hello, " + yourname + "!")
greeting("Donald Trump")
Traceback (most recent call last):
# 가장 최근에 콜을 추적해보니
File "main.py", line 4, in <module>
# 'main.py'파일에서, 4번째 줄
greeting("Donald Trump")
# greeting 모듈에서
File "main.py", line 2, in greeting
# 'main.py'파일에서, 2번째 줄
print("Hello", yourname + "!")
# greeting 안쪽에서
NameError: name 'yourname' is not defined
# yourname이라는 것이 정의 되지 않았다
# 'yourname'을 -> your_name이라는 매개변수로 고쳐야 한다
# 혹은 매개변수의 이름을 yourname이라고 하면 된다
1) ZeroDivisionError : 어떤 수를 0으로 나누려고 해서 발생하는 에러
2) SyntaxError : 파이썬 문법이 아니여서 발생하는 에러
3) Name error : 정의한 적이 없는 변수를 사용해서 발생하는 에러
4) Type error : 서로 다른 타입(자료형)을 연산하려고 할 때 많이 발생하는 에러
5) Index error : 대부분 시퀀스의 존재하지 않는, 벗어나는 index의 값을
찾으려고 해서 발생하는 에러
6) Import error : 임포트 하려는 모듈이나, 패키지등 파일이 없거나,
이름이 없을 때 발상하는 에러
↪️ try · · · except : 예외 처리
def average(numbers):
try:
return sum(numbers) / len(numbers)
except ZeroDivisionError:
print("No numbers!")
# average라는 매개변수로 numbers를 받는 함수를 정의했다
# try: 라는 구문으로 어떤 값을 반환하라고 했다
# except ZeroDivisionError : 에러 메세지 중 ZeroDivisionError일 경우
# No numbers!라는 것을 출력하고 했다
# 즉, 이 함수는 어떤 값을 반환하려고 할 것이고, ZeroDivisionError일 경우
# 노 넘버스! 라는 문구를 출력 할 것이다
# try, except 구문과 조건문으로 예상되는 에러 혹은 정의한 함수에서
# 에러가 발생하지 않게 할 수 있다
💬 디버깅이 중요한 이유?
개인적으로 디버깅이 중요하다고 생각하는 이유는 '사용자에게 불편하고, 불쾌한 경험을 최소화 할 수 있다' 라는 점이다. 아래 기사에서처럼 프로그램의 완성도, 개발자의 실력 향상과 유지 보수 및 개발 시간 단축 등등 여러 이점이 있을 것이라고 생각한다.
디버깅을 하는 과정은 프로그램의 완성도 높은 개발은 물론, 개발자의 코딩 실력 향상에도 도움이 된다
반응형
'파이썬' 카테고리의 다른 글
💾 상속, 캡슐화, 다형성 (0) | 2021.06.27 |
---|---|
파이썬 기초 3️⃣ [메소드, 튜플, 모듈, 클래스, 인스턴스, OOP] (0) | 2021.06.21 |
파이썬 기초 2️⃣ [조건문, 리스트, 시퀀스, 반복문] (0) | 2021.06.21 |
파이썬 기초 1️⃣ [입 출력, 변수, 연산, 자료형 변환] (0) | 2021.06.21 |
댓글