EAFP(Easier to Ask for Forgiveness than Permission, 「허락보다 용서가 쉽다」)는 파이썬 코드의 대표적 스타일입니다.
「먼저 시도해 보고, 안 되면 예외로 처리한다」는 발상으로, 다른 언어의 「조심스럽게 미리 검사하고 시도」 스타일(LBYL)과 대비됩니다.
두 스타일 비교.
LBYL(Look Before You Leap, 「뛰기 전에 살펴라」): if key in dict: value = dict[key]; else: value = default.
EAFP: try: value = dict[key]; except KeyError: value = default.
같은 일을 다른 식으로 표현합니다.
EAFP가 파이썬에서 권장되는 이유.
1) 「경합 조건(race condition)」 회피 — 검사와 사용 사이에 상태가 바뀔 수 있음.
2) 코드가 더 짧음 — 정상 흐름이 메인이고 예외만 처리.
3) 더 직관적 — 「뭘 하려는지」가 먼저 보임.
4) 일부 경우 빠름 — 검사 단계가 사라짐.
실제 예시.
파일 열기: try: f = open("data.txt"); except FileNotFoundError: f = create_default_file().
속성 접근: try: value = obj.attr; except AttributeError: value = None — 또는 value = getattr(obj, "attr", None)으로 더 짧게.
단, 항상 EAFP가 답은 아닙니다.
1) 예외가 너무 자주 발생하면 비용 큼(예외 자체의 처리 비용).
2) 「확실히 검사할 수 있는」 경우(예: 입력 검증)는 LBYL이 더 명료.
3) 다중 검사가 복잡해지면 한 검사로 묶는 게 깔끔.
EAFP는 「기본 스타일」이지만 상황에 맞게 LBYL과 균형을 잡습니다.
한 줄 요약
EAFP는 「먼저 시도하고 예외로 처리」하는 파이썬다운 스타일이며, LBYL은 「미리 검사하고 시도」하는 보수적 스타일입니다.
파이썬은 EAFP를 권장하지만 둘의 균형이 중요합니다.
더 알아볼 것
- dict.get vs try/except
- 파일 처리에서의 EAFP
- EAFP의 성능 함정