예외 처리

BANG·2020년 11월 24일
0

Python 기본

목록 보기
14/15

예외 처리

  • try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해줌

try, except문

  • try 블록 수행 중 오류가 발생하면 except 블록이 수행
  • try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않음
try:
    ...
except [발생 오류[as 오류 메시지 변수]]:    # 괄호 안의 내용을 생략할 수 있다
    ...

[try, except문 사용방법 3가지]

try .. finally 문

  • finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행
  • finally절은 사용한 리소스를 close해야 할 때에 많이 사용
f = open('foo.txt', 'w')
try:
    # 무언가를 수행한다.
finally:
    f.close()

여러개의 오류처리하기

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

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

  • 2개 이상의 오류를 동일하게 처리하기 위해서는 괄호를 사용하여 함께 묶어 처리
try:
    a = [1,2]
    print(a[3])
    4/0
except (ZeroDivisionError, IndexError) as e:
    print(e)

오류 회피하기

try:
    f = open("나없는파일", 'r')
except FileNotFoundError:
    pass    # FileNotFoundError가 발생할 경우에 pass를 사용하여 오류를 그냥 회피하도록 작성

오류 일부러 발생시키기

  • raise 명령어를 사용해 오류를 강제로 발생시킬 수 있음
class Bird:
    def fly(self):
        raise NotImplementedError   # NotImplementedError는 파이썬 내장 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용

class Eagle(Bird):
    pass

eagle = Eagle()
eagle.fly()

예외 만들기

  • 파이썬 내장 클래스인 Exception 클래스를 상속하여 만들 수 있음
class MyError(Exception):
    pass

def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)

say_nick("천사")
say_nick("바보")

# "천사"가 한 번 출력된 후 MyError가 발생
class MyError(Exception):
    pass

def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)

try:
    say_nick("천사")
    say_nick("바보")
except MyError:    # MyError 발생을 예외 처리
    print("허용되지 않는 별명입니다.")
class MyError(Exception):
    pass

def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)

try:
    say_nick("천사")
    say_nick("바보")
except MyError as e:
    print(e)    # 오류 메시지가 출력되지 않음
  • 오류 메시지를 출력했을 때 오류 메시지가 보이게 하려면 오류 클래스에 str 메서드를 구현
class MyError(Exception):
    def __str__(self):    # 오류 메시지를 print문으로 출력할 경우에 호출되는 메서드
        return "허용되지 않는 별명입니다."

def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)

try:
    say_nick("천사")
    say_nick("바보")
except MyError as e:
    print(e)
profile
Record Everything!!

0개의 댓글

관련 채용 정보