카테고리 없음

try / exception 에러 처리

kinggoddino 2024. 11. 21.

파이썬에서 에러가 발생하면 기본적으로 코드가 중단되는데, 

try except 문법을 활용하면 코드가 중단되지 않고 계속 진행할 수 있다.

 

try - except : 에러가 있어도 건너뛰게 할 수 있는 방법

 

예시1

- 정상 상황

people = [
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
]

for person in people:
    if person['age'] > 20:
        print (person['name'])

# carry
# ben

 

- 데이터가 하나 잘못 입력된 상황

people = [
    {'name': 'carry', 'age': 38},
    {'name': 'john'},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
]

for person in people:
    if person['age'] > 20:
        print (person['name'])

# KeyError: 'age'       # 에러 발생함
# carry

 

- try except 사용하기

people = [
    {'name': 'carry', 'age': 38},
    {'name': 'john'},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
]

for person in people:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:
        name = person['name']
        print(f'{name} - 에러입니다')

# carry
# john - 에러입니다
# ben

 

이렇게 에러가 있어도 멈추지 말고 except 로 빼고 싶을 때 사용한다

 

 

 

예시2  에러 종류에 따라 다른 로직 처리

number = "num"

try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
    number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
except: # 에러가 발생했을 때 처리
    print(f"{number}은(는) 숫자가 아닙니다.")

 

어떤에러가 발생했을 때 >>> 어떤 결과를 출력해라

 

라고 따로 명령할 수 있음.

 

number = input()

try:
    # number = int(number)
    int(number)
    10 / number

except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
    print(f"{number}은(는) 숫자가 아닙니다")
    
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
    print("0으로는 나눌수 없습니다")
    
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
    print(f"예상하지 못한 에러가 발생했습니다 error : {e}")

# except 문법 또한 if / elif와 같이 연달아서 작성할 수 있음

 

 

여기서 마지막에 있는

except Exception as e

 

정의되지 않은 에러를 e 변수에 담아서 출력하려고 하는거다.

근데 남발하면 좋지 않음.

왜 에러가 발생했는지 알 수가 없기 때문이다.

 

 

이왕이면 위에서처럼 

except ValueError:
except ZeroDivisionError:

 

이런식으로 구체적인 에러 발생 상황을 명시해서 빼주는 게 좋다.

 

 

에러명칭을 아는 방법은 그냥 

내가 예외처리하고싶은 코드를 일부러 입력해보고,

출력된 에러 중에 앞부분을 따오면 된다.

 

예를 들어

 

10/0 
# ZeroDivisionError: division by zero
int("number") 
# ValueError: invalid literal for int() with base 10: 'number'

 

이렇게 하면 됨