본문 바로가기
파이썬

디버깅 버그 에러 메세지 예외

by Ele(단단) 2021. 6. 22.
반응형

 

☢️ 버그 : 코드가 원하는 대로 동작하지 않는 경우

  • 프로그램이 죽는 (크래시가 발생하는) 경우
  • 예상한 속도보다 훨씬 느리게 동작하는 경우
  • 잘못된결과를 출력하는 경우
  • 코드 설계 상 일어나면안되는 상황이 일어난 경우

⛔️ 예외 : 일반적이지 않은 코드의 동작

  • 사용자가 프로그램을 강제 종료하는 경우
  • 분수 분모에 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 구문과 조건문으로 예상되는 에러 혹은 정의한 함수에서
# 에러가 발생하지 않게 할 수 있다

 

💬 디버깅이 중요한 이유?

개인적으로 디버깅이 중요하다고 생각하는 이유는 '사용자에게 불편하고, 불쾌한 경험을 최소화 할 수 있다' 라는 점이다. 아래 기사에서처럼 프로그램의 완성도, 개발자의 실력 향상과 유지 보수 및 개발 시간 단축 등등 여러 이점이 있을 것이라고 생각한다. 

디버깅을 하는 과정은 프로그램의 완성도 높은 개발은 물론, 개발자의 코딩 실력 향상에도 도움이 된다

반응형

댓글