Big problem fetching members from dynamically loaded module

Peter Otten __peter__ at web.de
Sat Jun 25 22:55:42 CEST 2005


Philippe C. Martin wrote:

> OK Peter, first of all thanks.
> 
> You seem to be German and although I leave in the states, I'm French and
> your english is clearly far more advanced than mine: I have yet to
> understand a few of your comments ;-)

My French is mostly read-only, so let me rephrase: 

from module import *, try ... except, eval(), exec all work together to make
your program harder to understand and more likely to fail in obscure ways.

>> Care to provide the traceback?
> 
> Traceback (most recent call last):
>   File "SC_Shell.py", line 1095, in ?
>     l_d = SC_Shell()
>   File "SC_Shell.py", line 326, in __init__
>     self.__Make_Menu_Area()
>   File "SC_Shell.py", line 828, in __Make_Menu_Area
>     l = inspect.getmembers(eval(c))
>   File "<string>", line 0, in ?
> NameError: name 'BC' is not defined

That traceback and the code you posted do not fit together. So back to
square one.

Staring at the code you posted, I think one thing you could try would be to
modify the eval() to

eval("BC", self.m_process_global, self.m_process_local)

to ensure that eval() and exec share the same namespace.
Generally speaking, I would prefer (I hope I got that right)

module = __import__("package.module", globals(), locals(), ["module"])
members = inspect.getmembers(module)

Members of the module would then be accessed via getattr():

member = getattr(module, member_name)

Peter




More information about the Python-list mailing list