<개인공부>/[Python]

[python] 파이썬 에러 종류 10가지

BlockDMask 2021. 7. 1. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 자주 보는 에러 종류에 대해서 이야기해보려 합니다.

우리가 코드를 작성하다 보면 빈번히 발생하는 것이기 때문에 놀라지 마시고, 콘솔에 나오는 안내에 따라서 "어떤 에러가 나왔구나"
"이렇게 처리하면 되겠다" 하고 해결하시면 됩니다.

<목차>
1. python ValueError
2. python IndexError
3. python SyntaxError
4. python NameError
5. python ZeroDivisionError
6. python FileNotFoundError
7. python TypeError
8. python AttributeError
9. python KeyError 
10. python OverFlowError
11. 기타 에러들은 어디서 보는가

 

1. 파이썬 ValueError


ValueError는 부적절한 값을 가진 인자를 받았을 때 발생하는 에러입니다.

흔히들 참조값이 없을 때 발생한다고 하는데, 그렇게 이야기하면 이해가 잘 안 되어서.
제가 추천드리고 싶은 문장은 "부적절한 값을 가진 인자를 받았을 때" 발생한다.입니다.
아래에 설명드릴 IndexError에서 설명을 못하는 경우 ValueError 가 나오기도 합니다. (IndexError 보다 더 큰 범위의 에러)

 

1-1) ValueError : 부적절한 값을 인자로 받았을 때, 명확한 예제

num = int("BlockDMask")
print(f"number : {num}")

int로 값의 타입을 변경해주는 함수에 "BlockDMask"라는 문자열을 넣는 경우가 
바로 "부적절한 값을 인자로 받았을 경우"입니다.

int("1")과 같이 숫자로 변경할 수 있는 문자열이 와야 하는데,
int("BlockDMask")라는 숫자로 변경할 수 없는 말도 안 되는 이런 부적절한 문장을 넣었기 때문에 ValueError 에러가 발생하게 됩니다.

이 경우에 결과에 나온 거처럼 ValueError 가 발생합니다.

 

1-2) ValueError : 흔히들 참조값이 없다고 하는 예제

arr = ['a', 'b', 'c', 'd', 'e']

arr.index('z')  # error

'a', 'b', 'c', 'd', 'e'의 값이 존재하는 리스트에서 'z' 값을 찾으려 하거나, 접근하거나, 지우려 하는 경우
해당 참조값이 없기 때문에 에러가 발생하게 됩니다.

이때 발생하는 에러가 ValueError입니다.

 

 

2. 파이썬 IndexError


이건 다들 아시겠죠?

인덱스 범위를 벗어나는 경우에 발생하는 에러가 IndexError 입니다.

arr = ['a', 'b', 'c', 'd', 'e']

arr[50]

이렇게 범위를 벗어난 index에 접근하려 하는 경우 발생하는 에러입니다.

 

 

3. 파이썬 SyntaxError


파이썬 문법 오류가 발생하는 경우 SyntaxError 가 발생합니다.
대부분 SyntaxError는 우리가 사용하는 IDE가 잡아주기도 합니다. 

a = 1

if a < 9
    print("a < 9")

이런 식으로 if 뒤에 : 콜론을 빼먹고 코드를 작성해서 실행을 하면 SyntaxError 문법이 잘못되었다는 에러를 발생시킵니다.
사실 IDE가 빨간 줄을 그어주어서 알 수 있긴 합니다.

 

 

4. 파이썬 NameError


지역변수, 전역 변수 이름을 찾을 수 없는 경우에 NameError 가 발생합니다.

즉, 위에서 선언하지도 않은 변수를 사용하려고 할 때 발생하는 에러입니다.
"네가 사용하려는 변수가 없는데?" 이런 에러입니다.

a = 1
b = 2

print(c)

변수 a, b를 선언해놓고, 변수 c는 만들지 않았습니다.
이때 변수 c를 사용하려고 하면 발생하는 에러가 NameError입니다.

 

 

5. 파이썬 ZeroDivisionError


ZeroDivisionError는 0으로 나누려는 경우에 발생하는 에러입니다

1/0, 5/0, 10/0과 같이 분모에는 0이 들어갈 수 없기 때문에 발생하는 에러입니다.

a = 99 / 0

print(a)

이렇게 분모에 0이 들어가는 경우.
즉, 0으로 나누는 코드가 들어가는 경우에 ZeroDivisionError 가 발생하게 됩니다.

 

 

6. 파이썬 FileNotFoundError


파일이나 디렉터리에 접근하려 할 때, 해당 파일이나 디렉터리가 없는 경우 발생하는 에러가 FileNotFoundError입니다.

우리가 파일이나 디렉터리에 접근을 하려 할 때 open 함수를 사용하는데 이때 해당 파일이 없다면 발생하게 됩니다.

# blockdmask.py 라는 파일은 없음.
f = open("blockdmask.py", "r")

blockdmask.py라는 파일은 존재하지 않습니다. 그 파일에 open 함수를 이용해서 접근을 시도했지만 없는 파일이므로 에러가 발생한 것을 볼 수 있습니다.
에러 메시지를 잘 보면 "File이나 Directory 가 존재하지 않는다"라는 것을 볼 수 있습니다.

 

 

7. 파이썬 TypeError


잘못된 타입을 전달했을 때 발생하는 에러가 TypeError입니다.

연산이나 함수에 전달될 데이터의 타입이 잘못되는 경우에 발생하는 에러입니다.
연산 1 + 2를 기대했는데 1 + "ABC" 이런 경우입니다.

a = 1 + "abc"   # type error

두 개의 타입은 더할 수 없는 타입인데 이 타입을 더하려고 하니, TypeError 가 나오게 되는 것입니다.

 

 

8. 파이썬 AttributeError


어트리뷰트 참조나 대입이 실패한 경우에 발생하는 에러가 AttributeError입니다.

어트리뷰트라는 것은 우리가 클래스를 사용할 때 "객체.메서드" 이런 식으로 사용하는데 .메서드 요 부분을 어트리뷰트라고 합니다.
(물론 .속성도 포함되겠죠)
그러니까 정리를 하자면

"클래스(모듈)의 객체에 해당하는 메서드나 속성을 잘못 호출하거나 대입했을 때 발생하는 에러"라고 할 수 있습니다.

 

math라는 모듈을 가지고 와서 해당 모듈에 있는 메서드를 호출해 보았습니다.
math 모듈에는 소수점 올림 작업을 진행해주는 ceil 메서드가 존재합니다.

정상적으로 math.ceil()을 호출해보고, 
math.ceil2()라는 없는 메서드도 호출해보았습니다.

import math

# 정상 접근
a = math.ceil(1.2)
print(a)

# math ceil2 라는 메서드는 없습니다.
b = math.ceil2(1.2)
print(b)

역시 math 모듈에 ceil2() 라는 메서드는 없으므로 AttributeError 가 발생한 것을 볼 수 있습니다.

 

 

9. 파이썬 KeyError


딕셔너리에서 접근하려는 키 값이 없을 때 발생하는 에러가 KeyError입니다.

바로 에제를 보실까요?

d = {"a": 12, "b": 33}

# 없는 키값에 접근
result = d["z"]

이렇게 'a', 'b' 키만 존재하는 딕셔너리에서 'z'라는 키 값에 접근하려 하는 경우에 키 값이 없기 때문에  KeyError 가 발생하는 것을 볼 수 있습니다.

 

 

10. 파이썬 OverFlowError


연산의 결과가 너무 커서 데이터 타입이 표현할 수 있는 숫자의 범위를 넘어가는 경우에 발생하는 에러가 OverFlowError 입니다. 

파이썬3에서는 정수 타입에서는 OverFlow가 발생하지는 않습니다.
하지만, float 타입 (소수점)에서 OverFlow가 발생할 수 있습니다.
아래 예제는 float 타입 오버플로우 에러입니다.

a = 2 ** 123456
b = 5

print(a / b)

2의 123456 제곱을 한 수를 5로 나눕니다.
나누기의 결과 값은 자동적으로 float 타입으로 형 변환이 되는데, 이때 float 타입으로 변환하기에는 너무 큰 숫자이기 때문에 오버플로우가 발생하게 됩니다.

 

 

11. 기타 파이썬 에러들


파이썬의 대부분의 에러는 Exception 클래스에 의해서 파생됩니다.
Exception 클래스가 맨 위에 있고 그 아래에 우리가 배운 IndexError라든지 다른 에러들이 속해있는 것입니다.

기타 파이썬의 에러들은 파이썬 도큐먼트 [바로가기] 에 가면 볼 수 있습니다.

이런 에러들을 처리하는 방법에 대해서 알고 싶다면 예외처리(try exception) 포스팅을 방문해보세요. [바로가기]

직접 에러를 발생시키는 방법에 대해서 알고 싶다면 raise 포스팅을 방문해보세요. [바로가기]

 

오늘은 이렇게 파이썬에서 10종류의 에러에 대해서 알아보았습니다. 다른 수많은 에러들이 있지만
제가 판단했을 때 상대적으로 자주 접할 수 있는 에러를 골라보았습니다.
도움이 되었으면 좋겠습니다. 감사합니다.

반응형