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

Gökhan Sever gokhansever@gmail....
Sat Nov 7 22:56:16 CST 2009


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/ipython-dev/attachments/20091107/da10e62e/attachment.html 


More information about the IPython-dev mailing list