Обработчик исключений всего приложения имеет смысл?

Предположим, что это может быть полезно в отладчике VisualStudio, который показывает неупорядоченные свойства объекта.

(function(s){var t={};Object.keys(s).sort().forEach(function(k){t[k]=s[k]});return t})({b:2,a:1,c:3})
10
задан EmmEff 18 September 2008 в 18:52
поделиться

6 ответов

Мне нравятся обработчики исключений верхнего уровня в целом (независимо от языка). Они - великолепное место к ресурсам очистки, которые не могут быть сразу связаны с ресурсами, использованными в методе, который выдает исключение.

Это - также фантастическое место для входа тех исключений при наличии такой платформы. Обработчики верхнего уровня поймают те причудливые исключения, которые Вы не запланировали и позволили Вам исправить их в будущем, иначе, Вы никогда не можете знать о них вообще.

Просто будьте осторожны, что Ваш обработчик верхнего уровня не выдает исключения!

11
ответ дан 3 December 2019 в 16:55
поделиться

Приложение широкий обработчик прекрасно. Они являются великими для входа. Просто удостоверьтесь, что приложение широкое длительно и вряд ли разрушит себя.

2
ответ дан 3 December 2019 в 16:55
поделиться

Деструктор (как в __ del __ метод) является плохой идеей, поскольку их, как гарантируют, не назовут. atexit модуль является более безопасным подходом, хотя они все еще не будут стрелять, если интерпретатор Python откажет (а не приложение Python), или если OS. _ выход () используется, или процесс настойчиво уничтожается, или перезагрузки машины. (Конечно, последний объект не является проблемой в Вашем случае.), Если Ваш процесс является склонным к катастрофическому отказу (он использует непостоянные сторонние дополнительные модули, например) можно хотеть сделать очистку в простом родительском процессе для большей изоляции.

Если Вы действительно не волнуетесь, используйте atexit модуль.

7
ответ дан 3 December 2019 в 16:55
поделиться

при использовании классов необходимо освободить ресурсы, которые они выделяют в их деструкторах вместо этого, конечно. Используйте попытку: на целом приложении просто, если Вы хотите к бесплатным ресурсам, которые уже не освобождены деструкторами Ваших классов.

И вместо того, чтобы использовать вместилище кроме: необходимо использовать следующий блок:

try:
    main()
finally:
    cleanup()

Это гарантирует очистку большим количеством pythonic способа.

2
ответ дан 3 December 2019 в 16:55
поделиться

Это походит на разумный подход, и более простой и надежный, чем деструктор на singleton-классе. Вы могли бы также посмотреть на "atexit" модуль. (Объявленный "в выходе", не "tex это" или чем-то как этот. Я перепутал это долгое время.)

1
ответ дан 3 December 2019 в 16:55
поделиться

Рассмотрите запись менеджера по контексту и использование с оператором.

1
ответ дан 3 December 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: