[Python] 예외처리

shlim55·2025년 11월 6일

Python

목록 보기
16/25

05-4 예외처리

If문 조건문 생각하면 거의 비슷하다

try-except 문

try:
    ...
except [발생오류 [as 오류변수]]:
    ...
# try_except.py
try:
    4 / 0
except ZeroDivisionError as e:
    print(e)

4/0을 실행했을 때 오류가 뜨고

이 오류를 e라고 부르겠다.

이 오류를 잡아주고 프린트 해주는 것

try-finally 문

Finally는 오류가 나도 무조건 수행되는 문장

여러 개의 오류 처리하기

try:
    ...
except 발생오류1:
   ... 
except 발생오류2:
   ...
# many_error.py
try:
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except IndexError:
    print("인덱싱 할 수 없습니다.")

인덱싱 할 수 없습니다. 에러가 뜬다
가장 먼저 터지는 에러의 에러메시지가 뜬다

이렇게 묶어서도 가능하다

try:
    4 / 0
except (ZeroDivisionError, IndexError) as e:
    print(e)

division by zero    
try:
    a = [1,2]
    print(a[3])
    4/0
except (ZeroDivisionError, IndexError) as e:
    print€

list index out of range

try-else 문

# try_else.py
try:
    age=int(input('나이를 입력하세요: '))
except:
    print('입력이 정확하지 않습니다.')
else:
    if age <= 18:
        print('미성년자는 출입금지입니다.')
    else:
        print('환영합니다.')

Error가 아닐경우 else문 실행된다.

오류 회피하기

# error_pass.py
try:
    # 설정 파일을 읽으려 시도
    f = open("설정파일.txt", 'r')
    config = f.read()
    f.close()
except FileNotFoundError:
    pass  # 설정 파일이 없어도 계속 진행

# 프로그램의 주요 기능은 계속 수행
print("프로그램이 정상적으로 실행됩니다.")

오류가 발생해도 그냥 패스하게 된다

오류 일부러 발생시키기

class Bird:
    def fly(self):
        raise NotImplementedError
    
class Eagle(Bird):
    pass
eagle = Eagle()
eagle.fly()

펄럭펄럭

Raise를 쓰면 일부로 에러가 터진다

꼭 덮어 쓰지 않으면 안되게 하려고
이렇게 강제를 하기 위해서 일부러 에러가 나게 함

예외 만들기

class MyError(Exception):
    pass
def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)
say_nick("바보")

나만의 에러 클래스
익셉션 클래스를 상속받고
바보라 쓰면에러가 터지게 구현

class MyError(Exception):
    def __str__(self):
        return "허용되지 않는 별명입니다."
def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)
# say_nick("바보")
try:
    say_nick("천사")
    say_nick("바보")
except MyError:
    print("허용되지 않는 별명입니다.")

에러메시지 추가 하려면 에러메시지에 추가

바보라쓰면 에러가 발생해 익셉션이터지고
허용되지 않는 별명입니다 출력

근데 이렇게 에러를 만들일 별로 없음

profile
A Normal Programmer

0개의 댓글