Как получить ошибочную строку при использовании IronPython с C # /. NET в качестве хоста, при ошибке во время выполнения? - PullRequest
8 голосов
/ 24 июня 2011

Смущен названием?Позвольте мне объяснить: я выполняю скрипт python внутри процесса .NET (моим приложением C # является хост) с использованием IronPython:

ScriptEngine python = Python.CreateEngine();
ScriptSource pyFromFileSource = python.CreateScriptSourceFromString(script);
CompiledCode pyFromFileCode = pyFromFileSource.Compile();
ScriptRuntime runtime = engine.Runtime;
ScriptScope scope = runtime.CreateScope(); //get a scope where we put in the stuff from the host
scope.SetVariable("lab", this); //allow usage of this class in the script
script.Execute(scope);

Приведенный выше код выполняется в фоновом потоке (используяTask класс).Сценарий содержит ошибку, из-за которой всплывает IronPython.Runtime.Exceptionis.TypeErrorException.Я могу поймать это и получить сообщение.
Но как получить строку сценария или номер строки, которая вызывает исключение?

Ответы [ 2 ]

9 голосов
/ 25 июня 2011

Вы можете вызвать PythonOps.GetDynamicStackFrames для исключения и получить номера строк из объектов DynamicStackFrame.

5 голосов
/ 15 июля 2013

Этот ответ предоставляет средство для форматирования исключения, полученного из кода IronPython, в строку, которая содержит более полезную информацию, такую ​​как номера строк и стек вызовов Python:

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