سؤال

لدي ironpython استضافتها ضمن طلبي، كلما ألقيت على استثناء ألقيت من برنامج نصي، أحصل على رطانة غير مفيد مثل هذا:

IronPython.NewTypes.System.Exception_1$1: Error occurred during conversion ---> Microsoft.Scripting.ArgumentTypeException: expected int, got DispMethod
   at _stub_$245##245(Closure , CallSite , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call1[T0,TRet](Func`3 target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update1[T,T0,TRet](CallSite site, T0 arg0)
   at _stub_$227##227(Closure , CallSite , Object )
   at IronPython.Runtime.Converter.Convert(Object value, Type to)
   at IronPython.Runtime.Operations.ArrayOps.SetItem(Array data, Int32 index, Object value)
   at _stub_$244##244(Closure , CallSite , Object , Object , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call3[T0,T1,T2,TRet](Func`5 target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
   at ConvertToFgf$223##223(Closure , Object , Object , Object )
   at _stub_$192##192(Closure , CallSite , CodeContext , Object , Object , Object , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call5[T0,T1,T2,T3,T4,TRet](Func`7 target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update5[T,T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
   at Convert$224##224(Closure , Object , Object )
   --- End of inner exception stack trace ---
   at Convert$224##224(Closure , Object , Object )
   at _stub_$42##42(Closure , CallSite , CodeContext , Object , Object , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call4[T0,T1,T2,T3,TRet](Func`6 target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update4[T,T0,T1,T2,T3,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3)
   at Run$225##225(Closure )

ما أود الحصول عليه بدلا من ذلك هو ثعبان التربية. هل هناك على أي حال للحصول على هذه المعلومات؟

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة فقط إلى إصدار نصي يمكنك القيام به:

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

إذا كنت بحاجة فعلا إلى كائن Beython Track Back الذي أقترحه:

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];

لكنك تحتاج إلى ترميز ترميز للقيام بذلك. في 2.0 يمكنك الحصول على Codecontext من خلال:

new CodeContext(new PythonDictionary(), HostingHelpers.GetLanguageContext(engine));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top