I've been bugged by the python function globals(), and I have no idea what is happening.
def foo():
    if False:
        x = 2
    elif True:
        globals()['x'] = 2
        print(x)
        
def foo2():
    if False:
        y = 2
    elif True:
        globals()['x'] = 2
        print(x)
foo2()
print("foo2 function working well")
foo()
This gives me the following results :
2 
foo2 function working well!
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-66-4e0c45e0bd37> in <module>
     14 
     15 foo2()
---> 16 foo()
<ipython-input-66-4e0c45e0bd37> in foo()
      4     elif True:
      5         globals()['x'] = 2
----> 6         print(x, "Working well!")
      7 
      8 def foo2():
UnboundLocalError: local variable 'x' referenced before assignment
So basically, having x defined in the condition before, even if not used, will generate an error afterward.
I can't explain why some uninterpreted code can generate an error, and I can't understand why this particular one can have any consequences.
I guess this is in the end just because I don't really get what globals() is doing.
Does anyone have an explanation, or good documentation talking about this?
 
    