[Python.NET] Problem when chaining script calls through CLR classes

Chris Faulhaber cfaulhaber at codealchemy.org
Sun Jan 16 01:21:11 CET 2005


Hi folks,

I've run across what I think may be a bug when I chain a script call 
through my own application.  I'm using 1.0-beta4 on Windows XP with an 
installation of Python 2.4.  The sequence I use to reproduce the problem 
is fairly simple:
1) Execute some Python code either through PyObject.InvokeMethod, or 
PythonEngine.RunSimpleString.
2) From the executed Python code, call into a CLR class.
3) From the CLR class, execute Python code again.

When this happens, I get a NullReferenceException with this stack trace:
at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args, 
IntPtr kw)
at Python.Runtime.PyObject.Invoke(PyObject[] args)
at Python.Runtime.PyObject.InvokeMethod(String name, PyObject[] args)
at <line in my code that made the second call into Python code>

Here is some example code that demonstrates the issue:
using System;
using Python.Runtime;

namespace PDNBug {
    public class Example {
        [STAThread]
        static void Main(string[] args) {
            PythonEngine.Initialize();
            PythonEngine.RunSimpleString("from CLR.PDNBug import 
Example\nExample.FirstCall()");
        }

        public static void FirstCall () {
            Console.WriteLine("First call succeeded.");
            PythonEngine.RunSimpleString("from CLR.PDNBug import 
Example\nExample.SecondCall()");
        }

        public static void SecondCall () {
            Console.WriteLine("Second call succeeded.");
        }
    }
}

Note that this example uses RunSimpleString to demonstrate the effect, 
but the above stack trace came from some more complex code that 
primarily uses code objects generated through Python compile().  When 
the example code is executed, I receive the following output:
First call succeeded.
Traceback (most recent call last):
  File "<string>", line 2, in ?
<CLR.System.NullReferenceException object at 0x02DC6F50>: Object 
reference not set to an instance of an object.

So is this issue a bug, or should I simply not be doing what I'm doing?

Regards,
Chris Faulhaber


More information about the PythonDotNet mailing list