Big problem fetching members from dynamically loaded module
Philippe C. Martin
philippe at philippecmartin.com
Sun Jun 26 10:56:21 EDT 2005
> My French is mostly read-only, so let me rephrase:
Thank you :-)
> 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.
What would you suggest then, I just want my code to
1) be sturdy
2) some of the modules might not be there depending on the configuration,
and I want their members in the menus if they are installed.
If there is a cleaner way, I'm ready to try it.
> 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)
That was it, thank you!
>
> 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)
>
I will study that.
Many thanks
Philippe
Peter Otten wrote:
> 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