Получение traceback информация от исключений IronPython

Этот веб-сайт примечания, что можно использовать класс ControlPaint в Системе BCL C#. Windows. Пространство имен форм.

12
задан Josh Lee 14 June 2013 в 15:43
поделиться

1 ответ

Если вам просто нужна текстовая версия, вы можете сделать:

engine.GetService<ExceptionOperations>().FormatException(exception);

Если вам действительно нужен объект отслеживания Python, я бы предложил:

Func<PythonTuple> exc_info = engine.Operations.GetMember<Func<PythonTuple>>(engine.GetSysModule(), "exc_info");

Сохраните это где-нибудь полезное, а затем, когда вам нужно вызвать его:

TraceBack tb = (TraceBack)exc_info()[2];

Это будет работать, пока вы перехватываете исключение.

Немного менее поддерживаемый, но более простой способ сделать это:

TraceBack tb = PythonOps.GetExceptionInfoLocal(context, exception)[2];

Но для этого вам нужен CodeContext. В 2.0 вы можете получить CodeContext следующим образом:

new CodeContext(new PythonDictionary(), HostingHelpers.GetLanguageContext(engine));
16
ответ дан 2 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

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