Hi ironpython,
Here's your Daily Digest of new issues for project "IronPython".
In today's digest:ISSUES
1. [New issue] Scope is not remembered after an import
2. [New comment] Scope is not remembered after an import
----------------------------------------------
ISSUES
1. [New issue] Scope is not remembered after an import
http://ironpython.codeplex.com/workitem/30955
User WimVanLoocke has proposed the issue:
"When using ironpython to run py scripts, one creates in c# as scope for the
engine, and sets a variable.
When running the .py file is executed and the scope is know.
When running a .py file that imports an other .py file( can contains ref to
variable in the scope ) the variable is no longer know.
When looking into the code
{ snipped }
internal PythonModule/*!*/ CompileModule(string fileName, string moduleName,
SourceUnit sourceCode, ModuleOptions options, out ScriptCode scriptCode) {
ContractUtils.RequiresNotNull(fileName, "fileName");
ContractUtils.RequiresNotNull(moduleName, "moduleName");
ContractUtils.RequiresNotNull(sourceCode, "sourceCode");
scriptCode = GetScriptCode(sourceCode, moduleName, options);
Scope scope = scriptCode.CreateScope();
return InitializeModule(fileName,
((PythonScopeExtension)scope.GetExtension(ContextId)).ModuleContext,
scriptCode, options);
}
{ end snipped }
you can see that a new scope is created, and not the initial scope is used.
Init :
_Engine = Python.CreateEngine();
scope = _Engine.CreateScope();
scope.SetVariable("I2C", localEngine);
scope.SetVariable("UART", Poderosa);
scope.SetVariable("dbg", _txtOut);
_txtBox.InteractiveObj.Add("I2C", localEngine);
_txtBox.InteractiveObj.Add("UART", Poderosa);
_txtBox.InteractiveObj.Add("dbg", _txtOut);
Execute
_Engine.ExecuteFile(_PathToScript, scope);"-----------------
2. [New comment] Scope is not remembered after an import
http://ironpython.codeplex.com/workitem/30955
User slide_o_mix has commented on the issue:
"This doesn't work in CPython either. Each module has it's own scope:
foo.py:
print "x = %d" % x
def foo():
x = globals()['x']
print "x = %d" % x
script.py:
x = 5
import foo
foo.doit()
OUTPUT:
Traceback (most recent call last):
File
"C:\Python27\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line
325, in RunScript
exec codeObject in __main__.__dict__
File "script.py", line 3, in <module>
import foo
File "foo.py", line 3, in <module>
print "x = %d" % x
NameError: name 'x' is not defined
"
----------------------------------------------
----------------------------------------------
You are receiving this email because you subscribed to notifications on
CodePlex.
To report a bug, request a feature, or add a comment, visit IronPython Issue
Tracker. You can unsubscribe or change your issue notification settings on
CodePlex.com.
_______________________________________________
Ironpython-users mailing list
Ironpython-users@python.org
http://mail.python.org/mailman/listinfo/ironpython-users