Я пытаюсь создать функцию, которая запускается только при возникновении необработанных исключений.
Решение, которое я нашел в Интернете, заключается в переопределении / переносе sys.excepthook
, например:
import sys
def exception(*args, **kwargs):
print('Uncaught exception was found', args, kwargs)
sys.excepthook = exception
def foo():
bar()
def bar():
raise ValueError('I am an exception. Catch me if you can!')
foo()
Если вы сохраните приведенный выше код в файл и запустите его, используя python
, будет напечатано «Не найдено исключение». И если вы добавите попытку / исключая около bar()
, она не запустится. Это именно та функциональность, которую я хочу.
Это работает даже в интерактивной оболочке Python и использует mayapy
. Единственная ситуация, в которой я обнаружил, что она не работает - это сама Autodesk Maya. Вы можете запустить приведенный выше код в редакторе сценариев, как элемент меню или кнопку полки, и он не запускает содержимое функции exception
. Однако, как ни странно, он работает в Nuke (как с использованием его интерпретатора Python, так и изнутри Nuke).
Итак, подведем итог - вышеупомянутый метод работает по:
- Сохранение текста в виде файла и выполнение его с помощью
python
- Запуск
python
в качестве интерактивной оболочки, вставка кода и запуск его там
- Сохранение текста в виде файла и выполнение его с помощью
mayapy
- Запуск
mayapy
в качестве интерактивной оболочки, вставка кода и запуск его там
И не работает:
- Запуск кода в редакторе сценариев Maya или в виде кнопки полки или пункта меню.
Если есть другой, лучший способ добиться того, чего я хочу, пожалуйста, дайте мне знать. Иначе, есть ли причина, почему этот метод не работает? Любая помощь будет оценена.