Если у вас слишком много уровней вложенных
if, код перестаёт быть читаемым и удобным для поддержки — вы строите пирамиду. 😄Посмотрите:
def process_user(user_data):
if user_data:
if 'name' in user_data:
if user_data['name']:
if 'email' in user_data:
if validate_email(user_data['email']):
return save_user(user_data)
else:
return "Invalid email"
else:
return "Email missing"
else:
return "Name empty"
else:
return "Name missing"
else:
return "No data"
Это называется «антипаттерн стрелки» (Arrow Anti-Pattern) или «пирамида смерти» (Pyramid of Doom). Основной сценарий спрятан в самом низу. Чтобы понять, что делает код, приходится держать в голове 4+ уровней вложенности.
А вот этот вариант гораздо лучше:
def process_user(user_data):
# Сначала обрабатываем все ошибки
if not user_data:
return "No data"
if 'name' not in user_data:
return "Name missing"
if not user_data['name']:
return "Name empty"
if 'email' not in user_data:
return "Email missing"
if not validate_email(user_data['email']):
return "Invalid email"
return save_user(user_data)
Это линейный стиль «сверху вниз», а не «вглубь и обратно». Ошибки явно обрабатываются в начале, а основная логика выделена в конце. Если данные некорректны — происходит ранний выход из функции (early return).
👉 @PythonPortal
