파이썬의 예외 처리

may_soouu·2020년 12월 30일
0
post-thumbnail

try/except/else/finally 에서 각 블록의 장점을 이용해서 사용하는 방법을 정리하려고 합니다.

1. finally 블록

예외를 전달하고 싶지만, 예외가 발생해도 정리 코드를 실행하고 싶을 때는 try/finally를 사용하면 됩니다

ex)

file_open = open('/test.txt')
try:
    data = file_open.read()
finally:
    file_open.close()

2. else 블록

어떤 예외를 처리하고, 어떤 예외를 전달할지를 명확하게 하고자 한다면 try/except/else를 사용하면 됩니다.

def load_json_key(data, key):
    try:
        result_dict = json.loads(data)
    except ValueError as e:
        raise KeyError from e
    else:
        return result_dict[key]

except와 else를 나눠서 예외 전달 행위를 명확하게 할 수 있습니다.

1) json.loads 과정에서 ValueError가 일어나면
2) except에서 처리 됨
3) 에러 없으면 else로 넘어가서 벨류값 찾음
4) 3번의 과정에서 에러가 발생한다면, try/except와 구분되는 에러이기 때문에 시각적으로 except와 구분함

3. 모두 사용

복합문 하나로 모든 것을 처리하고자 한다면 try/except/else/finally 를 전부 사용하면 됩니다.

ex. 파일에서 수행할 작업 설명을 읽고, 처리한 후 바로 업데이트 하는 작업
try : 파일을 읽고 처리
except : try블록에서 일어난 예외 처리
else : 파일을 바로 업데이트하고, 관련한 예외가 전달되게 하는데 사용
finally : 파일 핸들을 정리하는데 사용

undefined = object()

def divide_json(path):
    handle = open(paht, 'r+')
    try:
        data = handle.read()
	op = json.loads(data)
        value = (
            op['numerator'] / 
            op['denominator'])
    except ZeroDivisionError as e:
        return undefined
    else:
        op['result'] = value
        result = json.dumps(op)
        handle.seek(0)
        handle.write(result)
        return value
    finally:
        handle.close()

출처 : 도서 [파이썬 코딩의 기술]

profile
back-end 개발자

0개의 댓글