Steve Holden wrote: > Stef Mientki wrote: >> hello, >> >> I've a graphical application (wxPython), >> where the code in the main GUI loop is given below. >> >> >> 1 JAL_Loaded = False >> 2 while len(App_Running) > 0: >> 3 if JALsPy_globals.State == SS_Run: >> 4 try: >> 5 if JAL_Loaded: >> 6 reload ( JAL_simulation_file ) >> 7 else: >> 8 JAL_Loaded = True >> 9 import JAL_simulation_file >> 10 except JALsPy_globals.Reload_Exception: >> 11 JALsPy_globals.State = SS_Halt >> >> >> The first time the while loop is entered, >> JAL_Loaded is False (line 1), >> and when I press some button, >> the code will enter at line 8, >> importing a module, that has executable code with an infinite loop. >> >> To exit this infinite loop, an exception is generated (by a button >> press), >> and program comes back in the above while-loop line (10,11,2). >> >> So far so good. >> >> Then I change the code in the imported file, >> and when I start the engine again, >> the flag JAL_Loaded is True, so I don't import, >> but I reload the file. >> >> Now I get the next exception >> UnboundLocalError: local variable 'JAL_simulation_file' referenced >> before assignment >> >> So obviously I can't reload but have to do an import again >> (which makes the code much simpler ;-) >> but I don't understand why the reload raises an exception ???? >> > You have an assignment to JAL_simulation_file elsewhere inside the same > function, No these are the only 2 uses of "JAL_simulation_file" in the whole project.
later in the code. This means that Python will assume that it > is local to the function, but the import statement will affect the > module namespace rather than the function namespace. > > In other words, your code is roughly equivalent to what follows, with > the added complexity that the illegal reference isn't triggered until > the second iteration of a loop. > > >>> def f(): > ... print os > ... import os > ... os = "Something" > ... > >>> f() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "<stdin>", line 2, in f > UnboundLocalError: local variable 'os' referenced before assignment > >>> > > The solution? Don't assign to JAL_simulation_file, and the function will > use the local instead. > The solution is much simpler, but I don't understand why the "import", which really reloads the changed code in JAL_simulation_file, works the second time :-( 2 while len(App_Running) > 0: 3 if JALsPy_globals.State == SS_Run: 4 try: 9 import JAL_simulation_file 10 except JALsPy_globals.Reload_Exception: 11 JALsPy_globals.State = SS_Halt cheers, Stef Mientki -- http://mail.python.org/mailman/listinfo/python-list