Thanks again for your help, I agree, it seems I need to read a good book on Python.
One last question, will Python allow me to add new items to InterfaceModule.VarDictionary from the Python functions I call ? "Alex Martelli" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > wardm <[EMAIL PROTECTED]> wrote: > >> Thanks Alex for your help, (and advice on focusing the point of my >> question). >> >> I was able to compile and run your example OK, but when I try to use the >> "VarDictionary" in the >> MyScriptModule.py code, I get an exception. >> >> I added the following code to the C app just to add two entries to the >> Dictionary >> >> PyDict_SetItemString( m_pVarDictionary, "tk1", >> Py_BuildValue("s","test1Val")); >> PyDict_SetItemString( m_pVarDictionary, "tk2", >> Py_BuildValue("s","test2Val")); >> >> Then tried various things in the Python code to display the contents of >> the >> "VarDictionary", >> such as adding the "print VarDictionary" below. >> >> import InterfaceModule >> >> def functionName(): >> print "hello" >> print dir(InterfaceModule) >> print "that's all" >> print VarDictionary > > Note the wrong indentation in this latter print statement: this would > already cause a syntax error (unless the leading 'p' happened to be > aligned with the leading 'd' of 'def', in which case the function would > be terminated, the latest print would happen at import-time, and the > FOLLOWING statement: > >> return > > ...would then be a syntax error (return outside of function). But, > there's more: > > >> Even though "VarDictionary " is in the Dir, every time I try to use the >> "VarDictionary" the program fails. > > "VarDictionary" is in the dir(...) *** of InterfaceModule ***, of > course, so you need to refer to it as InterfaceModule.VarDictionary in > your Python code -- the barename, nor qualified by modulename, just will > not work, of course!!! > > Adding the two C code lines you quote, and changing the Python example > code to: > > def functionName(): > print "hello" > print dir(InterfaceModule) > print "VarDictionary is:", InterfaceModule.VarDictionary > print "that's all" > > changes that part of the output to: > > hello > ['VarDictionary', '__doc__', '__name__'] > VarDictionary is: {'tk2': 'test2Val', 'tk1': 'test1Val'} > that's all > > > With all due respect, it looks like you're trying to run before you can > walk -- or more specifically, to embed Python in C++ before you become > familiar with the most elementary and fundamental aspects of Python, > such as indentation and the need to qualify compound names. You might > want to consider getting a good Python book -- such as, my own Python in > A Nutshell (2nd ed), Aahz and Stef Maruch's Python For Dummies, Wesley > Chun's Core Python Programming (2nd ed) -- they're all very recent (mine > is just out, Aahz's and Stef's I believe is due to hit bookstores in > September or October), and any of them might serve you well (if you're > OK with books not necessarily covering the very latest release of Python > [and the issues you're having suggest that this is not really the > problem!], there are many other good books, such as Magnus Lie Hetland's > "Beginning Python", Beazley's "Python Essential Reference", Lutz and > Ascher's "Learning Python", -- http://mail.python.org/mailman/listinfo/python-list