Changing behaviour of namespaces - solved, I think

Mikael Olofsson mikael at isy.liu.se
Thu Sep 21 09:34:18 EDT 2006


Peter Otten wrote:
> To feed an arbitrary mapping object to execfile() you need to upgrade to
> Python 2.4.

Thanks! As clear as possible. I will do that.

FYI: I think I managed to achieve what I want in Py2.3 using the 
compiler module:

    def getNamesFromAstNode(node,varSet):
        if node.__class__ in (compiler.ast.Global,compiler.ast.Import):
            varSet.union_update(node.names)
        if node.__class__ in (compiler.ast.Name,):
            varSet.add(node.name)
        for subNode in node.getChildNodes():
            getNamesFromAstNode(subNode,varSet)

    # Get all variable names that are referenced in the file:
    varSet = sets.Set()
    mainNode = compiler.parseFile(filePath)
    getNamesFromAstNode(mainNode,varSet)

    # Define a namespace and update it:
    ns = {}
    for varName in varSet:
        ns[varName] = dummyObject

    # Execute the file without NameErrors:
    execfile(filePath,ns)

Batteries included!

/MiO



More information about the Python-list mailing list