WeniVooks

검색

베이스캠프 파이썬

예외 처리와 오류 관리

1. Error의 종류

모든 에러는 아래 공식문서에서 확인할 수 있습니다.

내장 예외
1.1. 문법 에러(Syntax Error)

문법 에러는 파이썬 코드를 실행하기 전에 발생하는 에러로, 코드 작성 시 오타나 문법적인 오류가 있을 경우 발생합니다.

이 경우 파이썬 인터프리터는 해당 줄에서 에러가 발생했음을 알려주며, 발견된 오류의 위치와 종류를 알려줍니다.

# Syntax Error for i in range(10) print(i)
1.2. 이름 에러(Name Error)

이름 에러는 정의되지 않은 변수나 함수를 호출했을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 변수나 함수를 찾을 수 없다는 메시지를 출력합니다.

# Name Error print(x)
1.3. 타입 에러(Type Error)

타입 에러는 서로 다른 타입의 변수 간 연산이나 함수 호출 시 발생합니다.

이 경우 파이썬 인터프리터는 해당 연산이나 함수 호출이 불가능하다는 메시지를 출력합니다.

# Type Error x = 10 y = '20' print(x + y)
1.4. 인덱스 에러(Index Error)

인덱스 에러는 리스트나 튜플 등의 시퀀스 타입에서 존재하지 않는 인덱스를 호출했을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 인덱스를 찾을 수 없다는 메시지를 출력합니다.

# Index Error my_list = [1, 2, 3] print(my_list[3])
1.5. 키 에러(Key Error)

키 에러는 딕셔너리에서 존재하지 않는 키를 호출했을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 키를 찾을 수 없다는 메시지를 출력합니다.

# Key Error my_dict = {'a': 1, 'b': 2} print(my_dict['c'])
1.6. 값 에러(ValueError)

값 에러는 내장 함수나 메서드의 인자로 전달된 값의 타입이나 값이 유효하지 않을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 값을 처리할 수 없다는 메시지를 출력합니다.

# Value Error int('a')
1.7. 제로 나누기 에러(ZeroDivisionError)

제로 나누기 에러는 0으로 나누기 연산을 수행할 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 연산이 불가능하다는 메시지를 출력합니다.

# ZeroDivision Error x = 10 y = 0 print(x / y)
1.8. 어트리뷰트 에러(Attribute Error)

어트리뷰트 에러는 객체에 존재하지 않는 속성이나 메서드를 호출했을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 속성이나 메서드를 찾을 수 없다는 메시지를 출력합니다.

# Attribute Error my_list = [1, 2, 3] my_list.appnd(4)
1.9. 인자 개수 에러(TypeError)

인자 개수 에러는 함수나 메서드에 전달된 인자의 개수가 맞지 않을 때 발생합니다.

이 경우 파이썬 인터프리터는 해당 함수나 메서드에 전달된 인자의 개수가 맞지 않다는 메시지를 출력합니다.

# Type Error def add(x, y): return x + y add(1, 2, 3)

2. python 예외처리

파이썬에서 예외(exception)란 프로그램이 실행 중 예기치 않은 상황이 발생하여 프로그램이 종료되는 것을 의미합니다.

예를 들어, 정수를 0으로 나누려고 시도하거나, 존재하지 않는 파일을 열려고 시도하는 등의 상황에서 예외가 발생할 수 있습니다.

이러한 예외 상황에서 프로그램이 강제 종료되는 것을 방지하고, 예외 상황을 처리하는 방법을 "예외 처리"라고 합니다.

🧐 google convention에서는 try와 except를 최소 단위로 사용하길 권고합니다. 이는 에러가 나는 정확한 위치를 파악하기 위함입니다.

2.1. 예외처리 방법 try except

파이썬에서는 try except 구문을 사용하여 예외 처리를 할 수 있습니다.

try:
    # 예외가 발생할 가능성이 있는 코드
except:
    # 예외 처리 코드
try:
    # 예외가 발생할 가능성이 있는 코드
except:
    # 예외 처리 코드

발생하는 에러를 한꺼번에 처리 할 수 있습니다.

try: s = 1/0 print(s) except: print('error가 발생되었습니다!')

예상되는 에러가 있다면 에러명을 함께 명시해주면 아래처럼 처리할 수 있습니다.

try: s = 1/0 print(s) except ZeroDivisionError: print('0으로 나누어졌습니다!')

아래와 같은 코드도 가능합니다.

try: s = 1/1 # 0에서 1로 값을 바꾸었습니다. print(s) l = [1, 2, 3] print(l[3]) except ZeroDivisionError: print('0으로 나누어졌습니다!') except: print('오류가 났습니다!')

s = 1/0에서 1/1로 값을 바꿔 ZeroDivisionError을 회피할 수 있도록 하였습니다.

그 아래에는 IndexError를 발생시켰습니다.

이를 처리하는 로직이 없기 때문에 모든 오류를 한꺼번에 처리하는 except로 이동하여 '오류가 났습니다!'를 출력합니다.

{"packages":["numpy","pandas","matplotlib","lxml"]}
12장 예외처리12.2 기말고사