Существует ли чистый, элегантный и питонический способ автоматического получения информации по запросу?
Чего я хотел бы добиться, так это иметь переменную, которая работает как дисковый кеш: если он указывает на полезные данные, обработка просто запускается, если нет — обработка приостанавливается, данные извлекаются (с диска или онлайн-API), а затем обработка возобновляется.
Как в следующем псевдокоде:
try:
result = process (somedata) # if somedata is None it throws an exception
except MissingDataError: # Or whatever exception would be thrown
somedata = retrieve_external_information()
result = process(somedata)
except ...: # Handling other exceptions
Однако, поскольку функция process может генерировать исключения по другим причинам, кроме отсутствия данных, мне придется их обработать, возможно, в рамках другой попытки... кроме - что совсем не чисто.
Практично ли это делать таким образом? Или безопаснее просто проверить, существуют ли данные, и получить их, если их нет:
if somedata is None:
somedata = retrieve_external_information()
try:
result = process (somedata)
except ...: # Handling other exceptions
Проблема в том, что я могу ссылаться на somedata в различных частях моей программы, поэтому каждый раз создавать сложный синтаксис довольно неясно. Поэтому в идеале хотелось бы написать что-то вроде этого:
try:
result = wrap_process (somedata, retrieve_external_information) # If somedata is None, it's retrieved automatically before proceeding with the processing
except ...: # Handling other exceptions
Подробнее здесь: https://stackoverflow.com/questions/786 ... -on-demand