LBYL vs EAFP

Введение

LBYL - Look before you leap

Проверяй прежде чем делать. Семь раз отмерь один раз отрежь



EAFP - Easier to ask forgiveness then permission

Проще извиниться чем спросить разрешение

LBYL

LBYL на примере Python

# Process file: LBYL import os p = '/path/to/datafile.dat' if os.path.exists(p): process_file(p) else: print(f'No such file as {p}')

Перед тем как обрабатывать файл проверяем, что путь до него существует.

Проблемы:

Проверили только путь. А что если файл содержит какой-то мусор?

Что если путь указывает на директорию?

Получается, что нужно сделать ещё две проверки.

И даже в этом случае есть возможная проблема - гонка - что если файл удалят между проверкой и открытием? Получается, что нужно обрабатывать исключение в любом случае.

EAFP

EAFP на том же примере из Python

# Process file: EAFP p = '/path/to/datafile.dat' try: process_file(f) except OSError as e: print(f'Error: {e}')

Проверяем получилось или нет, если нет обрабатываем исключение

Автор статьи: Андрей Олегович