요약
- try / except / else / finally절의 용도를 잘 이해하고 사용해라.
- finally : 예외가 발생하더라도 자원 정리를 해야 할 필요가 있을 때 사용한다. 파일을 닫는 작업
- else : try가 성공했다고 가정하고 다음 작업을 할 때 사용해라. try에서 발생하는 예외가 무엇인지 범위를 좁혀줄 수 있음.
- try ~ else를 같이 쓸 때 try는 예외가 발생할 수 있는 부분, else는 예외가 전혀 발생하지 않는 부분으로 나눠주는 용도로도 쓸 수 있음. (명시적으로)
- 성공흐름 : try → else → finally
- 실패흐름 : try → except → finally
else 문의 효능
else는 다음 목적으로 사용한다.
- 코드에서 처리할 예외 / 위로 던질 예외를 명확하게 구분할 때
- 이런 방식으로도 구분 할 수 있음.
- try 블록 내에서는 예외가 발생하는 부분을 가리킬 때
- else 블록 내에서는 예외가 전혀 발생하지 않을 부분을 가리킬 때
else 블록을 사용하면 try 블록 안에 들어갈 코드를 최소화 할 수 있다. try 블록에 들어가는 코드가 줄어들면 발생할 여지가 있는 예외를 서로 구분할 수 있게 된다.
import json
def load_json_key(data, key):
try:
print('* JSON 데이터 읽기')
result_dict = json.loads(data) # ValueError가 발생할 수 있음.
except ValueError as e:
print('* ValueError 처리')
raise KeyError(key) from e
else:
print('* 키 검색')
return result_dict[key] # KeyError가 발생할 수 있음.
data = '{"foo": "bar",}'
key = 'foo'
try:
'bar' == load_json_key(data, key)
except KeyError as e:
print(f"Caught an error: {e}")
if e.__cause__:
print(f"Original cause: {e.__cause__}")
위 코드에서 try ~ else 문의 효능을 볼 수 있다.
- try 문에서는 ValueError가 발생할 수 있고, 그것을 Except 문에서 처리하는 것을 볼 수 있다.
- else 문은 바꿔 이야기하면 어떠한 예외도 발생하지 않는 곳 or 이 함수를 호출한 곳으로 올려야 하는 예외가 발생하는 곳으로 볼 수 있을 것이다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
이펙티브 파이썬 Item 25. 위치로만 인자를 지정하게 하거나 키워드로만 인자를 지정하게 해서 함수 호출을 명확하게 만들라 (1) | 2023.10.19 |
---|---|
이펙티브 파이썬 Item 21. 변수 영역과 클로저의 상호작용 방식을 이해하라 (1) | 2023.10.19 |
이펙티브 파이썬 Item 20. None을 반환하기보다는 예외를 발생시켜라 (0) | 2023.10.18 |
Effective Python Item 22. 변수 위치 인자를 사용해 시각적인 잡음을 줄여라 (0) | 2023.10.15 |
Effective Python Item 19. 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 마라. (0) | 2023.10.13 |