Я создал редактор карт в Python2.7.9
для небольшого проекта, и я ищу способы сохранить данные, которые я редактирую, в случае какого-либо необработанного исключения. Мой редактор уже есть метод для сохранения из данных, и мое текущее решение, чтобы иметь основной цикл, завернутое в try..finally
блок, аналогичный этому примеру:Можно ли обернуть весь основной цикл в блок try..finally?
import os, datetime #..and others.
if __name__ == '__main__':
DataMgr = DataManager() # initializes the editor.
save_note = None
try:
MainLoop() # unsurprisingly, this calls the main loop.
except Exception as e: # I am of the impression this will catch every type of exception.
save_note = "Exception dump: %s : %s." % (type(e).__name__, e) # A memo appended to the comments in the save file.
finally:
exception_fp = DataMgr.cwd + "dump_%s.kmap" % str(datetime.datetime.now())
DataMgr.saveFile(exception_fp, memo = save_note) # saves out to a dump file using a familiar method with a note outlining what happened.
Это кажется, что лучший способ, чтобы убедиться, что, независимо от того, что происходит, делается попытка сохранить текущее состояние редактора (в той степени, в которой это предусмотрено saveFile()
) в случае его сбоя. Но я задаюсь вопросом, действительно ли инкапсуляция моей основной петли в блок try
является безопасной и эффективной и хорошей формой. Это? Существуют ли риски или проблемы? Есть ли лучший или более обычный способ?
В идеале вы должны тщательно протестировать свой код и исправить любые сбои, а затем вам не понадобится 'try' вокруг вашего кода. Однако, поскольку полное тестирование иногда нереально, это может быть достойная мера «на всякий случай», если она не станет ленивым парашютом (например, «ну, я думаю, эта функция иногда может терпеть неудачу, try' поймает его, поэтому я исправлю его в следующем выпуске, возможно »). – TigerhawkT3
@ TigerhawkT3 Это в значительной степени мое отношение к этому, но ввиду того, что я все еще очень плохо разбираюсь в этом, я просто ищу способ сохранить свое время и усилия между сглаживанием маленьких морщин жизни, так сказать. Я прошу в основном убедиться, что блоки 'try..finally' или' try..except..finally' не имеют никакого особого поведения (читай: вредные или замедляющие эффекты), которые появляются, если вы слишком долго не заканчивая их. – Augusta