Уменьшение вложенности

Загрузим json из файла:

def load_json_data(filepath):
    with open(filepath, 'r') as file_handler:
        return json.load(file_handler)

Всё сломается, если передать путь до несуществующего файла. Исправим:

def load_json_data(filepath):
    if os.path.exists(filepath):
        with open(filepath, 'r') as file_handler:
            return json.load(file_handler)
    else:
        return None

Первый секрет: если функция ничего не возвращает, то она возвращает None. Поэтому писать return None в конце функции смысла нет. Избавляемся от else:

def load_json_data(filepath):
    if os.path.exists(filepath):
        with open(filepath, 'r') as file_handler:
            return json.load(file_handler)

Теперь всё лаконично, но очень связанно, как предложение, в котором, помимо деепричастных оборотов, есть ещё несколько уровней подчинений, сложным образом связанных друг с другом и заставляющие держать их все в памяти, чтобы понять смысл, пусть и простой.

Упростить можно так:

def load_json_data(filepath):
    if not os.path.exists(filepath):
        return None
    with open(filepath, 'r') as file_handler:
        return json.load(file_handler)

Теперь стало проще: меньше вложенности, просто читать. Меньше багов.

Меньше вложенности – лучше