El siguiente código debe ejecutarse sin detener el depurador:
var engine = Python.CreateEngine(AppDomain.CurrentDomain); var source = engine.CreateScriptSourceFromString("Foo.Do()"); var compiledCode = source.Compile(new PythonCompilerOptions { Optimized = true }); try { compiledCode.Execute( engine.CreateScope( new Dictionary<string, object> { { "Foo", new Foo() } })); MessageBox.Show("Executed without error"); } catch (Exception ex) { MessageBox.Show(string.Format("Error at execution: {0}", ex.Message)); }Usando esta clase:
public class Foo { public void Do() { throw new InvalidOperationException("The debugger should not break here..."); } } La ejecución del script se ejecuta en un bloque de prueba para manejar cualquier excepción. Si tengo un código como 1 / 0 , todo funciona perfectamente. La excepción se crea en Python (o en el motor) y mi bloque catch se llama como se esperaba sin obligar al depurador a detenerse en ningún lugar.
Llamando a try { new Foo().Do(); } catch {} en C# también funciona sin detener el depurador.
Pero lanzar una excepción en el código C# que se invoca en python obligará al depurador a detenerse en la línea throw new... -.
No quiero que el depurador se detenga allí.
Deshabilité las excepciones de primera oportunidad en Debug/Exceptions pero el depurador aún se detiene en el lanzamiento.
No puedo usar DebuggerStepThrough porque en mi código de trabajo la excepción no se lanzó en este método sino más profundamente en el código. El código también se usa fuera de C# y decorar todos estos métodos con DebuggerStepThrough hará que mi depurador de C# quede obsoleto.
Una solución es deshabilitar las excepciones no controladas por el User-unhandled en Debug/Exceptions también, pero quiero interrumpir las excepciones que no son manejadas por el usuario, por lo que esta no es una opción.
¿Qué puedo hacer para deshabilitar la excepción de primera oportunidad llamada desde el código python que se ejecuta en un bloque try... catch?
Lo más probable es que tenga una opción predeterminada marcada en la configuración de depuración que está causando esto:

Asegúrese de que la casilla no esté marcada y debería estar listo para comenzar. ¡Espero que eso ayude!