[Python] 예외처리 정리

GilLog·2020년 12월 15일
0

Python

목록 보기
7/18

🙆‍♂️ import 🙇‍♂️

점프 투 파이썬

파이썬 - 기본을 갈고 닦자!


예외 처리

try, except문

python에서 예외 처리를 위한 try, except문의 기본 구조이다.

try 블록 수행 중 오류가 발생하면 except 블록이 수행된다.
try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다.

try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...

[]는 생략할 수 있다.

따라서 아래 처럼 세 가지 방법으로 예외 처리가 가능하다.

# 오류 종류에 상관없이 오류가 발생하면 except 블록을 수행
try:
    ...
except:
    ...

# 오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행
try:
    ...
except 발생 오류:
    ...    

# 오류 메시지의 내용까지 알고 싶을 때 사용하는 방법
try:
    ...
except 발생 오류 as 오류 메시지 변수:
    ...
try:
    4 / 0
except ZeroDivisionError as e:
    print(e)
'''
division by zero
'''

finally

try문은 finally절을 사용할 수 있다.

finally절은 try문 예외 발생 여부와 상관 없이 항상 수행된다.
사용한 resource를 close해야 할 때 많이 사용

f = open('foo.txt', 'w')
try:
    # 무언가를 수행한다.
finally:
    f.close()

여러개 에러 처리

try문 에서 발생하는 여러 종류의 에러를 처리하기 위해 except을 여러개 사용할 수 있다.

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, IndexError) as e:
    print(e)

에러 회피

pass를 이용하면 에러 발생 시 에리 처리 없이 단순히 회피할 수 있다.

try:
    f = open("나없는파일", 'r')
except FileNotFoundError:
    pass

에러 발생시키기

raise명령어를 사용하면 에러를 강제로 발생 시킬 수 있다.

class Bird:
    def fly(self):
        raise NotImplementedError

위와 같이 raise를 발생시키는 method를 통해서 자식 클래스에 강제적으로 overriding해야 하는 method를 지정할 수 있다.
NotImplementedError는 파이썬 내장 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용


class Bird:
    def fly(self):
        raise NotImplementedError
        
# NotImplementedError 발생        
class Eagle(Bird):
    pass

eagle = Eagle()
eagle.fly()

# 정상 처리
class Eagle(Bird):
    def fly(self):
        print("very fast")

eagle = Eagle()
eagle.fly()

예외 만들기

Python 내장 Class인 Exception Class를 상속하면 자체적으로 예외 Class를 만들 수 있다.

class MyError(Exception):
    pass

print(e)로 에러 메시지가 보이게 하려면 에러 class에 다음과 같은 __str__ method를 구현해야 한다.

__str__ method는 print(e)처럼 에러 메시지를 print문으로 출력할 경우에 호출되는 method이다.

class MyError(Exception):
    def __str__(self):
        return "허용되지 않는 별명입니다."
profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글