본문 바로가기

Programming/공부

에러 메시지 읽기

"에러 메시지를 잘 읽을 줄 아는 것이 디버깅하는 지름길" 이라더라

 

 

 

 

 

def greeting(your_name):

print("Hello, " + yourname + "!")

greeting("Donald Trump")

 

 

 

>실행결과

 

>해석

Traceback : 코드의 아래에서부터 읽어라

(most recent call last) : 가장 최근의 call이 가장 마지막으로! 즉, 코드 순이 A-> B -> C 순이면 'C부터 읽어라'

 

 

File  "main.py", line 4, in <module>

  greeting("Donald Trump")             

바로 아래 오는 이 두 줄은 "에러가 발생한 길" 이다

<modul> 에서 발생했다는 것은 '어떤 함수에도 속하지 않은 가장 외부에서 불려진 코드'이다.

 

 

File  "main.py", line 2, in greeting

print("Hello", yourname + "!")       

다음에 오는 두 줄은 "결정적이게 에러를 발생시킨 부분" 이다. 

 

 

NameError: name 'yourname' is not defined

Error의 종류와 상세한 설명이다.  여기서 변수명'yourname'이 정의되지 않았다는 것을 뜻한다. 함수 greeting에서 input parameter로 your_name를 취하는데, output에선 yourname을 사용하려하니 errorr가 발생된 것이다!

 

 

 

이외 자주 접하는 Error Code
1. Syntax error
def add_all(numbers):
    result =  0
    for number in numbers
        result += number
    return result
File "main.py", line 3
   for number in numbers

SyntaxError: invalid syntax

"컴퓨터가 이해할 수 없는 코드" 즉, 문법오류 이다!

애초에 문법자체가 틀렸으므로 , Traceback 또한 없다.

 

2. NameError

위의 예에서 살펴본, "정의하기 전에 사용된 변수명" 때문에 발생한 에러이다.

보통 NameError가 뜬다면 오탈자를 확인하는 것이 좋다!

 

3. TypeError
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

와 같은 예가 있는데, 이는 '문자열 변수와 숫자형 변수를 더하려고 했기 때문'에 발생한 에러이다.

문자와 숫자는 더할 수 없다.

 

보통 TypeError는 

1. 문자열 변수와 정수형 변수를 연산하려고 하는 경우

2. 함수등의 parameter로 정수를 받아야하는데 문자열을 넣어준 경우

에 발생하는 경우가 많다.

 

 

4. IndexError
IndexError: string index out of range

"문자열의 해당 인덱스 글자가 존재하지 않으니" 에러발생

예를 들어

string = "dictionary"

"dictionary" 는 10글자이기에 index는 0에서 9까지만 존재한다

 

이때 string[10]로 11번째 글자를 call 하면 IndexError가 발생한다.

 

5. Zero division error

분모에 들어가는 변수가 0의 값을 가지기에 "0으로 나눈 에러" 가 발생한 것이다!

예로,

return sum(numbers)/len(numbers)

와 같은 함수를 짰는데, 

numbers에 원소가 존재하지 않을때 zero division error가 발생할 것이다

 

6. ImportError

import 한 함수를 찾을 수 없을때 발생한다.

 

7. Recursion Error 

재귀함수를 사용할 때 발생하는데, 

재귀함수가 1회 실행될때 depth가 1회 추가되는데, 

보통 재귀함수의 최대깊이인 1000회보다 더 깊게끔 함수가 실행될 때 발생한다.