I wrote the following code that works in Python 2.7 that takes the variables 
passed to the function into a dictionary.  The following call:

    strA = 'a'
    intA = 1
    dctA = makeDict(strA, intA)

produces the following dictionary:

     {'strA':'a', 'intA':1}

To access the names passed into the function, I had to find the information by 
parsing through the stack.  The code that used to work is:

from traceback import extract_stack

def makeDict(*args):
   strAllStack = str(extract_stack())
   intNumLevels = len(extract_stack())
   intLevel = 0
   blnFinished = False
   while not blnFinished:
       strStack = str(extract_stack()[intLevel])
       if strStack.find("makeDict(")>0:
           blnFinished = True
       intLevel += 1
       if intLevel >= intNumLevels:
           blnFinished = True
   strStartText = "= makeDict("
   intLen = len(strStartText)
   intOpenParenLoc = strStack.find(strStartText)
   intCloseParenLoc = strStack.find(")", intOpenParenLoc)
   strArgs = strStack[ intOpenParenLoc+intLen : intCloseParenLoc ].strip()
   lstVarNames = strArgs.split(",")
lstVarNames = [ s.strip() for s in lstVarNames ] if len(lstVarNames) == len(args):
       tplArgs = map(None, lstVarNames, args)
       newDict = dict(tplArgs)
       return newDict
   else:
       return "Error, argument name-value mismatch in function 'makeDict'. lstVarNames: " 
+ str(lstVarNames) + "\n args: " + str(args), strAllStack

The same code does not work in Python 3.3.4.  I have tried parsing through the 
stack information and frames and I can't find any reference to the names of the 
arguments passed to the function.  I have tried inspecting the function and 
other functions in the standard modules, but I can't seem to find anything that 
will provide this information.

Can anyone point me in the direction to find this information?  Any help is 
appreciated.

---Andrew

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to