2016-10-13 1 views
0

Я хотел бы, чтобы некоторые действия по очистке произошли в случае аварии моей программы. Я понимаю, что некоторые ситуации не могут быть обработаны (например, SIGKILL), но я хотел бы как можно больше охватить.Как очистить от аварии?

Модуль atexit был хорошим кандидатом, но документы явно утверждают, что

Функции зарегистрированной с помощью этого модуля не вызывается, когда программа убита сигнал не обрабатывается с помощью Python, когда Python обнаружена фатальная внутренняя ошибка или когда вызывается os._exit().

Есть функции или функции python, которые позволяют обрабатывать sys.exit() и неиспользованные программы для исключений? (это основное, что касается меня)

+0

Как заявил ForceBru простейший способ очистки, должен проверить, если очистка требуется при запуске программы. Самый простой способ сделать это - создать файл/с на диске, которые удаляются при успешном завершении программы. Если файл/s существует при запуске, вам необходимо выполнить очистку. –

ответ

0

SIGKILLcannot be handled, несмотря ни на что, ваша программа просто прекращена (яростно убит), и вы ничего не можете с этим поделать.

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

Для других случаев используйте atexit для обработки интерпретатора Python normal окончание. Если у вас есть какие-то необработанные исключения, увидеть, где они могут произойти и завернуть эти куски кода в try/except блоков:

try: 
    pass 
except ValueError as e: 
    pass 
except: 
    # catch other exceptions 
    pass 

Чтобы справиться с sys.exit вызовов, вы можете обернуть всю программу целиком в начальную точку в try/except блок и поймать SystemExit исключение:

try: 
    # your program goes here 
    # you're calling your functions from here, etc 
except SystemExit: 
    # do cleanup 
    raise 
+1

Это тоже мое понимание - вот почему я сказал, что * Я понимаю, что некоторые ситуации нельзя обрабатывать *, давая пример «SIGKILL». Я пытаюсь осветить другие случаи, упомянутые в вопросе. – WoJ

Смежные вопросы