I don't know what the problem is but here are some things that might help: - don't catch the exception, let it print out. Send the traceback to the list. - note you never reload siberia900 - in the load function the reload fails for an unknown reason and at the interpreter prompt you reload mytest, not siberia900. - you don't have to use exec - import is available as __import__() and reload is already a function.
Kent Garry Willgoose wrote: > I'm writing a simple modelling environment that provides a GUI for > dynamically coupling fortran and C subroutines to solve a science > problem. The GUI and environment glue are all python. One thing I > want to do is allow the user to load a python file that provides the > user defined details on how the C/Fortran modules are to be coupled > in the science model ... basically a script file if you like. They > use the GUI to select and run the python file. I have no control over > whether/when the user edits the python script and wants to rerun the > script without restarting the environment so I need to be able to > (repeatedly) reload the current script at any time > > I'm having problems with import and reload. Here is a simple test > code (mytest.py) that runs from the python prompt that shows the > problem, and the log of my session from the python command line. > > In the real code the variable 'model' is passed into load() ... I've > just set it here to make the code self contained. At the first load() > the version in siberia900.py is set to 1.00. Between the first and > second load() I edit siberia900.py so that version is 0.00 (just an > easy way to see if the modified code is reloaded). Clearly the reload > fails (and if I don't have the try/except ... that is the commented > line is executed ... it crashes with the error 'NameError: name > 'siberia900' is not defined'). Also clearly reloading mytest also > doesn't change anything. > > Now all this runs fine (i.e. the correct version numbers are output) > at the python interpretter line so its clearly something to do with > it being inside the module mytest which I don't understand. Finally > if I uncomment the bottom two lines and run it at the unix command > line as 'python mytest.py' it still fails in the same way (i.e. the > 'except' line is executed). > > Can anyone please explain what's going on ... and how I might be able > to do what I need to do. > > ------------------------------------ > current_model_name='' > > def load(): > global current_model_name > model='siberia900' > text1='import '+model > text2='reload('+model+')' > if model==current_model_name: > try: > exec(text2) > print 'here 2',text2 > except: > print 'here 3',text1 > exec(text1) > # exec(text2) > else: > print 'here 10', text1 > exec(text1) > current_model_name=model > return(siberia900.version) > > #load() > #load() > ---------------------------------------- > ----------------------------------------- > >>> import mytest > >>> mytest.load() > here 10 import siberia900 > '1.00' > >>> mytest.load() > here 3 import siberia900 > '1.00' > >>> reload(mytest) > <module 'mytest' from 'mytest.pyc'> > >>> mytest.load() > here 10 import siberia900 > '1.00' > ----------------------------------------- > > ==================================================================== > Prof Garry Willgoose, > Australian Professorial Fellow in Environmental Engineering, > Director, Centre for Climate Impact Management (C2IM), > School of Engineering, The University of Newcastle, > Callaghan, 2308 > Australia. > > Centre webpage: www.c3im.org.au > > Phone: (International) +61 2 4921 6050 (Tues-Fri AM); +61 2 6545 9574 > (Fri PM-Mon) > FAX: (International) +61 2 4921 6991 (Uni); +61 2 6545 9574 (personal > and Telluric) > Env. Engg. Secretary: (International) +61 2 4921 6042 > > email: [EMAIL PROTECTED]; > [EMAIL PROTECTED] > email-for-life: [EMAIL PROTECTED] > personal webpage: www.telluricresearch.com/garry > ==================================================================== > "Do not go where the path may lead, go instead where there is no path > and leave a trail" > Ralph Waldo Emerson > ==================================================================== > > > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor