Я думаю, что я читал, что исключения внутри with
не позволяют __exit__
правильно звонить. Если я ошибаюсь в этой заметке, прошу простить мое невежество.python, как безопасно обрабатывать исключение внутри диспетчера контекста
Так у меня есть некоторый псевдокод здесь, моя цель состоит в том, чтобы использовать контекст блокировки, что после __enter__
регистрирует стартовый DateTime и возвращает идентификатор блокировки, а на __exit__
записывает конец DateTime и освобождает замок:
def main():
raise Exception
with cron.lock() as lockid:
print('Got lock: %i' % lockid)
main()
Как я могу все еще повышать ошибки в дополнение к существующему контексту?
Примечание: Я намеренно поднимаю базовое исключение в этом псевдокоде, так как я хочу выйти безопасно в любое исключение, а не только ожидаемые исключения.
Примечание: Альтернативные/стандартные методы предотвращения параллелизма не имеют значения, я хочу применить эти знания к любому управлению общим контекстом. Я не знаю, имеют ли разные контексты разные причуды.
PS. Соответствует ли блок finally
?
Где вы получаете информацию? Я понимаю, что «с контекстами» * предназначены для * обработки очистки, если происходят какие-либо необработанные исключения. –
@JoelCornett Я думаю, что я получил информацию из SO-страниц, посвященных особенно вложенным контекстам. – ThorSummoner