[IPython-dev] "__builtins__.True = False" causes weird behaviours

Brian Granger ellisonbg.net@gmail....
Sat Nov 7 23:34:33 CST 2009


He he.  The good news is that trunk fixes most of this...

In [2]: __builtins__.True = False

In [3]: __builtins__.True == False
Out[3]: True

But exiting doesn't work:

In [4]: Exit

In [5]:

The reason exiting doesn't work is that ask_exit is called by Exit, exit()
and quit():

    def ask_exit(self):
        """ Call for exiting. Can be overiden and used as a callback. """
        self.exit_now = True

But if True is False, self.exit_now won't trigger the exit.

The funny thing is that doing the opposite really screws things up:

In [1]: __builtins__.False = True
   ...:
   ...:
   ...:
   ...:
   ...:   # stuck  forever indented...

But, just because you can hit your head with a hammer, doesn't mean you
should...;-)

Cheers,

Brian



On Sat, Nov 7, 2009 at 8:56 PM, Gökhan Sever <gokhansever@gmail.com> wrote:

> Hello,
>
> After reading the "Breaking the Universe in Python 2.6" section (Pg. 414)
> in Mark Lutz's Learning Python 4th Edition. Two issues appeared as shown
> below:
> *
> 1-) If I start ipython -pylab the mentioned assignment completely blocks
> the session. Only stopping or killing the process ends the current session.
> *
>
> [gsever@ccn Desktop]$ ipython -pylab
>  Logging to /home/gsever/.ipython/2009-11-07.py
>
> Python 2.6 (r26:66714, Jun  8 2009, 16:07:26)
> Type "copyright", "credits" or "license" for more information.
>
> IPython 0.10 -- An enhanced Interactive Python.
> ?         -> Introduction and overview of IPython's features.
> %quickref -> Quick reference.
> help      -> Python's own help system.
> object?   -> Details about 'object'. ?object also works, ?? prints more.
>
>   Welcome to pylab, a matplotlib-based Python environment.
>   For more information, type 'help(pylab)'.
>
> I[1]: __builtins__.True = False
> Exception in thread Thread-1:
> Traceback (most recent call last):
>   File "/usr/lib/python2.6/threading.py", line 522, in __bootstrap_inner
>     self.run()
>   File "/home/gsever/Desktop/python-repo/ipython/IPython/Shell.py", line
> 760, in run
>     self.IP.mainloop(self._banner)
>   File "/home/gsever/Desktop/python-repo/ipython/IPython/iplib.py", line
> 1760, in mainloop
>     self.interact(banner)
>   File "/home/gsever/Desktop/python-repo/ipython/IPython/iplib.py", line
> 1998, in interact
>     more = self.push(line)
>   File "/home/gsever/Desktop/python-repo/ipython/IPython/iplib.py", line
> 2302, in push
>     more = self.runsource('\n'.join(self.buffer), self.filename)
>   File "/home/gsever/Desktop/python-repo/ipython/IPython/Shell.py", line
> 431, in runsource
>     completed_ev.wait()
>   File "/usr/lib/python2.6/threading.py", line 393, in wait
>     self.__cond.wait(timeout)
>   File "/usr/lib/python2.6/threading.py", line 230, in wait
>     raise RuntimeError("cannot wait on un-aquired lock")
> RuntimeError: cannot wait on un-aquired lock
>
> Unhandled exception in thread started by <bound method
> IPShellMatplotlibQt4.__bootstrap of <IPShellMatplotlibQt4(Thread-1, started
> -1230734480)>>
> ---------------------------------------------------------------------------
> RuntimeError                              Traceback (most recent call last)
>
> /usr/lib/python2.6/threading.pyc in __bootstrap(self)
>     495         # if a non-daemonic encounters this, something else is
> wrong.
>
>     496         try:
> --> 497             self.__bootstrap_inner()
>     498         except:
>     499             if self.__daemonic and _sys is None:
>
> /usr/lib/python2.6/threading.pyc in __bootstrap_inner(self)
>     568         finally:
>     569             with _active_limbo_lock:
> --> 570                 self.__stop()
>     571                 try:
>     572                     # We don't call self.__delete() because it also
>
>
> /usr/lib/python2.6/threading.pyc in __stop(self)
>     579         self.__block.acquire()
>     580         self.__stopped = True
> --> 581         self.__block.notify_all()
>     582         self.__block.release()
>     583
>
> /usr/lib/python2.6/threading.pyc in notifyAll(self)
>     287
>     288     def notifyAll(self):
> --> 289         self.notify(len(self.__waiters))
>     290
>     291     notify_all = notifyAll
>
> /usr/lib/python2.6/threading.pyc in notify(self, n)
>     270     def notify(self, n=1):
>     271         if not self._is_owned():
> --> 272             raise RuntimeError("cannot notify on un-aquired lock")
>     273         __waiters = self.__waiters
>     274         waiters = __waiters[:n]
>
> RuntimeError: cannot notify on un-aquired
> lock---------------------------------------------------------------------------
> RuntimeError                              Traceback (most recent call last)
>
> /home/gsever/Desktop/python-repo/ipython/IPython/Shell.pyc in
> on_timer(self)
>    1075     def on_timer(self):
>    1076         update_tk(self.tk)
> -> 1077         result = self.IP.runcode()
>    1078         self.timer.start(self.TIMEOUT)
>    1079         return result
>
> /home/gsever/Desktop/python-repo/ipython/IPython/Shell.pyc in runcode(self)
>     491                 CODE_RUN = False
>     492                 # allow runsource() return from wait
>
> --> 493                 completed_ev.set()
>     494
>     495
>
> /usr/lib/python2.6/threading.pyc in set(self)
>     376         try:
>     377             self.__flag = True
> --> 378             self.__cond.notify_all()
>     379         finally:
>     380             self.__cond.release()
>
> /usr/lib/python2.6/threading.pyc in notifyAll(self)
>     287
>     288     def notifyAll(self):
> --> 289         self.notify(len(self.__waiters))
>     290
>     291     notify_all = notifyAll
>
> /usr/lib/python2.6/threading.pyc in notify(self, n)
>     270     def notify(self, n=1):
>     271         if not self._is_owned():
> --> 272             raise RuntimeError("cannot notify on un-aquired lock")
>     273         __waiters = self.__waiters
>     274         waiters = __waiters[:n]
>
> RuntimeError: cannot notify on un-aquired lock
>
> *
> 2-) Testing just with regular ipython. This time it gets even more bizarre.
> *
>
> In[1] It lets to do the assignment.
> In[2] A simple calculation results ok
> In[3] Tab-completion is blocked
> In[4] ? cannot retrieve the documentation
> In[5] exit() doesn't leave the session
>
> [gsever@ccn Desktop]$ ipython
>  Logging to /home/gsever/.ipython/2009-11-07.py
>
> Python 2.6 (r26:66714, Jun  8 2009, 16:07:26)
> Type "copyright", "credits" or "license" for more information.
>
> IPython 0.10 -- An enhanced Interactive Python.
> ?         -> Introduction and overview of IPython's features.
> %quickref -> Quick reference.
> help      -> Python's own help system.
> object?   -> Details about 'object'. ?object also works, ?? prints more.
>
> I[1]: __builtins__.True = False
>
> I[2]: 2*5
> O[2]: 10
>
> I[3]: import a
> ---------------------------------------------------------------------------
> ImportError                               Traceback (most recent call last)
>
> /home/gsever/Desktop/<ipython console> in <module>()
>
> ImportError: No module named a
>
> I[4]: __builtins__.?
> ---------------------------------------------------------------------------
> KeyError                                  Traceback (most recent call last)
>
> /home/gsever/Desktop/python-repo/ipython/IPython/iplib.pyc in
> multiline_prefilter(self, line, continue_prompt)
>    2456         out = []
>    2457         for l in line.rstrip('\n').split('\n'):
> -> 2458             out.append(self._prefilter(l, continue_prompt))
>    2459         return '\n'.join(out)
>    2460
>
> /home/gsever/Desktop/python-repo/ipython/IPython/iplib.pyc in
> _prefilter(self, line, continue_prompt)
>    2438         #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest)
> # dbg
>
>    2439
> -> 2440         return prefilter.prefilter(line_info, self)
>    2441
>    2442
>
> /home/gsever/Desktop/python-repo/ipython/IPython/prefilter.pyc in
> prefilter(line_info, ip)
>     149         handler = check(line_info, ip)
>     150         if handler:
> --> 151             return handler(line_info)
>     152
>     153     return ip.handle_normal(line_info)
>
> /home/gsever/Desktop/python-repo/ipython/IPython/iplib.pyc in
> handle_help(self, line_info)
>    2627             if line:
>    2628                 #print 'line:<%r>' % line  # dbg
>
> -> 2629                 self.magic_pinfo(line)
>    2630             else:
>    2631                 page(self.usage,screen_lines=self.rc.screen_length)
>
> /home/gsever/Desktop/python-repo/ipython/IPython/Magic.pyc in
> magic_pinfo(self, parameter_s, namespaces)
>     658         else:
>     659             self._inspect('pinfo', oname,
> detail_level=detail_level,
>
> *** ERROR: EOF in multi-line statement
>
> --> 660                           namespaces=namespaces)
>
> *** ERROR: EOF in multi-line statement
>
>     661
>     662     def magic_pdef(self, parameter_s='', namespaces=None):
>
> /home/gsever/Desktop/python-repo/ipython/IPython/Magic.pyc in
> _inspect(self, meth, oname, namespaces, **kw)
>     714             return 'not found'
>     715
> --> 716         info = Struct(self._ofind(oname, namespaces))
>     717
>     718         if info.found:
>
> /home/gsever/Desktop/python-repo/ipython/IPython/ipstruct.pyc in
> __init__(self, dict, **kw)
>     125         # safety-checked __setitem__
>
>     126         for k,v in dict.items():
> --> 127             self[k] = v
>     128
>     129
>
> /home/gsever/Desktop/python-repo/ipython/IPython/ipstruct.pyc in
> __setitem__(self, key, value)
>     135             raise KeyError(
>
> *** ERROR: EOF in multi-line statement
>
>     136             "Can't create unknown attribute %s - Check for typos,
> or use allow_new_attr to create new attributes!" %
> --> 137             key)
>
> *** ERROR: EOF in multi-line statement
>
>     138
>     139         self.__dict__[key] = value
>
> KeyError: "Can't create unknown attribute obj - Check for typos, or use
> allow_new_attr to create new attributes!"
>
> I[5]: exit()
> Do you really want to exit ([y]/n)? y
>
> I[6]: # Still in IPython
>
>
> *3) Using the default interpreter:*
>
> [gsever@ccn Desktop]$ python
> Python 2.6 (r26:66714, Jun  8 2009, 16:07:26)
> [GCC 4.4.0 20090506 (Red Hat 4.4.0-4)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> __builtins__.True = False
> >>> __builtins__.True == True
> True
> >>> True == False
> True
>
> The book says this type of assignment is not allowed in Python 3. So far,
> this is the weirdest issue I have ever seen relating to the IPython.
>
> --
> Gökhan
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev@scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/ipython-dev/attachments/20091107/76f35ea3/attachment-0001.html 


More information about the IPython-dev mailing list