Am Donnerstag, 19. September 2019 12:45:35 UTC+2 schrieb Richard Damon: > On 9/19/19 6:16 AM, Eko palypse wrote: > >> In all cases, if the optional parts are omitted, the code is executed in > >> the current scope. ... > >> > >> > >> You can see from it that "globals" is optional. > >> And that, if "globals" is missing, then > >> "exec" is executed in the current scope ("f1" in your case). > > Thank you for your answer, and that is exactly what confuses me? > > Where does x come from? If I only would read x then I would understand why > > it can be found/read but I alter it and as such I either have to provide the > > info that this is a global variable, declare it inside of f1 or provide > > the globals dict to exec. But I don't do any of it. Why is exec able to use > > the global x? > > > > Eren > > I think the issue is that x += 1 isn't exactly like x = x + 1, and this > is one case that shows it. x = x + 1 is an assignment to the symbol x, > which makes x a local, and thus the read becomes an undefined symbol. x > += 1 is different, it isn't a plain assignment so doesn't create the > local. The read of x is inherently tied to the writing of x so x stays > referring to the global. > > -- > Richard Damon
Thank you that would never have come to my mind. I thought +=1 is just syntactic sugar which clearly isn't. If I do the regular x = x + 1 then I do get the expected exception. Thank you Eren -- https://mail.python.org/mailman/listinfo/python-list