[IPython-user] FakeModule and python's __main__ module

Kenneth Arnold kenneth.arnold@gmail....
Tue Oct 6 22:02:53 CDT 2009


With tab completion, pretty printing, and output history management, I
think you'll find that IPython handles normally returned values quite
well.

If you still have extensive side-channel data (and logging, etc.
doesn't cut it), you could add that data as an attribute on whatever
object you're returning, or make a module-global dictionary that you
update. I've never felt the need to do those things, though. Keep even
your API clean; you'll thank yourself later :)

-Ken



On Tue, Oct 6, 2009 at 10:56 PM, Mike Blatchley <mabxmab@gmail.com> wrote:
> A friend of mine has recently introduced me to IPython and I'm hooked.  I've
> been using an older version (0.8.x), but have now downloaded 0.10 and am
> having trouble with some of my existing python scripts.  In a few of these,
> I get lazy with "returning" certain objects from methods.  Instead of
> returning them, I place them directly in the main/interactive namespace with
> the __main__ module.
>
> def someFunction():
>     import __main__
>     # do some stuff here
>     __main__.myObject=myObject
>     #etc.
>
> When I return to the interactive prompt, myObject isn't there.  Conversely,
> sometimes I try to retrieve "global" attributes from that namespace, but now
> get an error.  For example:
>
> In [16]: myObject=None
> In [17]: def test():
>    ....:     import __main__
>    ....:     print __main__.myObject
> In [18]: test()
> ---------------------------------------------------------------------------
> AttributeError                            Traceback (most recent call last)
> C:\work\test\<ipython console> in <module>()
> C:\work\test\<ipython console> in test()
> AttributeError: 'FakeModule' object has no attribute 'myObject'
>
> I've done searches on FakeModule and see quite a few mailing list postings
> indicating it replaces python's __main__, but am unclear if there is any way
> around my problem.  That is, other than sticking with the older releases of
> IPython.  Or rewriting my affected methods to not use __main__.
>
> Any suggestions would be much appreciated.
>
> Thanks much,
> Mike
>
>
> _______________________________________________
> IPython-user mailing list
> IPython-user@scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-user
>
>


More information about the IPython-user mailing list