A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-list/2001-April/077675.html below:

writing to locals (was RE: execfile: NameError exception thrown for things in locals())

writing to locals (was RE: execfile: NameError exception thrown for things in locals()) writing to locals (was RE: execfile: NameError exception thrown for things in locals())James_Althoff at i2.com James_Althoff at i2.com
Mon Apr 9 14:27:45 EDT 2001
< Tim informs ...>
> So this is what you can expect (or rail against) in the indefinite
future:
>
> 1. Python will eventually enforce the Ref Man's warnings against trying
>    to modify locals(), whether directly or indirectly.

uh-oh ... I guess I'm in violation of the intended policy.

I have a class that acts as a poor-man's spreadsheet in a GUI application.
I show a table and label the column headers as c1, c2, ...
For the last column (rightmost) I allow the user to input a formula such as
c1/c2 and use it to compute the values for that (rightmost) column.

A simplified version of the code (please excuse typo.s) looks like:

... my class ...

    def setFormula(self,formulaString):
     self.formula = formulaString

    def getCalculatedValueAt(self,rowIndex):
        count = self.getColumnCount()  # excludes the calculated column
        localsDict = locals()
        for columnIndex in xrange(count):
            columnID = 'c' + str(columnIndex+1)
            columnValue = self.getValueAt(rowIndex,columnIndex)
            localsDict[columnID] = columnValue
        try:
            value = eval(self.formula)
        except:
            value = 'Invalid formula'
        return value

It seems like the alternatives are:
  o build up an assignment statement in a string and do an
    exec (yuk, columnValue is already a perfectly good object)
  o use the instance dict and then preprocess
    the formula to change (e.g.) c1 to self.c1 (yuk)
  o use globals() and then add another loop at the end to
    delete the newly created global variables (to avoid
    interference with other instances of the class)

I guess using globals() is ok, but locals() seems so much nicer.  :-)

Any other suggestions?

Thanks,

Jim


More information about the Python-list mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4