[Python] 예외 처리

Jungmin Seo·2021년 5월 25일
0

1. 오류 예외 처리 기법

1-1 try, except문

  • try, except만 쓰는 방법
try:
    ...
except:
    ...
  • 발생 오류만 포함한 except문
try:
    ...
except 발생 오류:    # ex) except ZeroDivisionError:
    ...
  • 발생 오류와 오류 메시지 변수까지 포함한 except문
try:
    ...
except 발생 오류 as 오류 메시지 변수:    # ex) except ZeroDivisionError as e:
    ...

1-2 try.. finally

f = open('foo.txt', 'w')
try:
    ...    # 무언가 수행
finally:
    f.close()
  • finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행.
  • foo.txt 파일을 연 후 try문 수행, 예외발생여부와 상관없이 열린파일을 닫는데 f.close() 사용

2. 여러 개의 오류 처리하기

2-1 try, except

try:
    ...
except 발생오류1:
    ...
except 발생오류2:
    ...

🌭 주의 !

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

**인덱싱 오류가 먼저 발생했으므로, ZeroDivisionError 오류는 발생하지 않음.

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

** 2개 이상의 오류를 동일하게 처리하기 위해, 괄호로 묶어 함께 처리.


2-2 try문에 else절

try:
    ...
except 발생오류1:
    ...
else: 
    ...    # 오류가 없을 경우에만 수행

3. 오류 일부러 발생시키기

🍕 상속받는 자식 클래스는 반드시 특정 함수를 구현하도록 만들고 싶은 경우

# 자식 클래스가 fly 함수를 구현하지 않는다면, 부모 클래스의 fly 함수가 수행되어 오류 발생
class Bird:
    def fly(self):
        raise NotImplementedError

🍟 NotImplementedError
: 파이썬 내장오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용


4. 예외 만들기

🍕 특수한 경우에만 예외처리 하기 위해 예외를 만들어 사용

class MyError(Exception):    # 파이썬 내장 클래스인 Exception을 상속
    pass

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

say_nick("천사")
say_nick("바보")    # 오류 발생

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

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



아래 내용을 바탕으로 정리한 것이다.

점프투파이썬 (https://wikidocs.net/30)

profile
Hello World!

0개의 댓글

관련 채용 정보