Уменьшение вложенности
Загрузим 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)
Теперь стало проще: меньше вложенности, просто читать. Меньше багов.
Меньше вложенности – лучше