This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author schperplata
Recipients paul.moore, schperplata, steve.dower, tim.golden, zach.ware
Date 2019-03-25.17:31:05
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1553535065.81.0.184329137426.issue36426@roundup.psfhosted.org>
In-reply-to
Content
I've reported a stack overflow question and no reasonable explation was offered. Here is what I've discovered:
.. code-block:: python
    def func():
        varName = 'bar'
        varValue = 42
        localVarToEvaluate = varName + ' = varValue'

        try:
            exec(localVarToEvaluate)
        except Exception as err:
            print(str(err))
        
        if 'bar' in locals():
            # print(locals()['bar']) # (1) OK
            # print(bar)  # (2) ERR
            #print("'bar' OK:", bar)  # (3) ERR
            pass # uncomment any line above

    func()

After ``exec()`` is executed, ``bar`` can be seen in ``locals()``, but not accessible by intereter. Also, It can be accessed by directly calling ``print(locals()['bar'](``, but not ``print(bar)``.

This is the problem as long as the code is wrapped in function. If the same code is placed in the module body, works as expected. 

Is there any exaplanation for such behaviour, or is this a bug?
History
Date User Action Args
2019-03-25 17:31:05schperplatasetrecipients: + schperplata, paul.moore, tim.golden, zach.ware, steve.dower
2019-03-25 17:31:05schperplatasetmessageid: <1553535065.81.0.184329137426.issue36426@roundup.psfhosted.org>
2019-03-25 17:31:05schperplatalinkissue36426 messages
2019-03-25 17:31:05schperplatacreate