This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: IDLE Shell: delattr(__builtins__,"getattr") causes shell to stop working
Type: behavior Stage: resolved
Components: Versions: Python 3.2
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Ramchandra Apte, amaury.forgeotdarc, loewis, r.david.murray, terry.reedy
Priority: normal Keywords:

Created on 2012-06-20 06:03 by Ramchandra Apte, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (9)
msg163254 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-06-20 06:03
delattr(__builtins__,"getattr") causes shell to stop working
if you type some code in nothing gets printed back
if you press enter without typing any code you get a traceback

Exception in thread SockThread:
Traceback (most recent call last):
  File "/usr/lib/python3.2/socketserver.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python3.2/socketserver.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python3.2/socketserver.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python3.2/idlelib/rpc.py", line 503, in __init__
    socketserver.BaseRequestHandler.__init__(self, sock, addr, svr)
  File "/usr/lib/python3.2/socketserver.py", line 637, in __init__
    self.handle()
  File "/usr/lib/python3.2/idlelib/run.py", line 264, in handle
    rpc.RPCHandler.getresponse(self, myseq=None, wait=0.05)
  File "/usr/lib/python3.2/idlelib/rpc.py", line 280, in getresponse
    response = self._getresponse(myseq, wait)
  File "/usr/lib/python3.2/idlelib/rpc.py", line 300, in _getresponse
    response = self.pollresponse(myseq, wait)
  File "/usr/lib/python3.2/idlelib/rpc.py", line 438, in pollresponse
    response = self.localcall(seq, resq)
  File "/usr/lib/python3.2/idlelib/rpc.py", line 185, in localcall
    method = getattr(obj, methodname)
NameError: global name 'getattr' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.2/threading.py", line 740, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.2/threading.py", line 693, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.2/idlelib/run.py", line 135, in manage_socket
    server.handle_request() # A single request only
  File "/usr/lib/python3.2/socketserver.py", line 269, in handle_request
    self._handle_request_noblock()
  File "/usr/lib/python3.2/socketserver.py", line 286, in _handle_request_noblock
    self.handle_error(request, client_address)
  File "/usr/lib/python3.2/idlelib/run.py", line 240, in handle_error
    print('Request: ', repr(request), file=erf)
  File "/usr/lib/python3.2/socket.py", line 111, in __repr__
    getattr(self, '_closed', False) and " [closed] " or "",
NameError: global name 'getattr' is not defined
msg163255 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-06-20 06:05
Running the delattr(__builtins__,"getattr") in Python from the cmd line doesn't create any problems though.
msg163256 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-06-20 06:08
Another note: this bug is reproducable in the IDLE Shell with the python subprocess feature enabled (the python process that runs your commands and the python process that manages IDLE's windows are different).
msg163257 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2012-06-20 06:18
Why do you think this is a bug? It is expected behavior.
msg163267 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-06-20 12:03
IDLE should try to mimic Python as much as feasible.
msg163268 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-06-20 12:04
s/Python/Python in cmd
msg163271 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2012-06-20 12:34
Well, I don't think that imitating the command line needs to extend to supporting doing unusual things to builtins, so unless someone like Terry disagrees I think we should close this as won't fix.
msg163272 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2012-06-20 12:35
I'm afraid it's not feasible.  Python (or IDLE) is allowed to rely on Python working correctly, and if commonly used functions are modified there will be unexpected errors.

Likewise in 3.3, after a "del __builtins__.hasattr", even import statements will fail...
msg163290 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2012-06-20 18:36
To put it another way, IDLE is written for standard Python. A standard Python interpreter has a getattr builtin that works as documented in the library manual. Deleting that or any other builtin makes the interpreter non-standard. So would replacing or wrapping the builtin with a function that does anything other than innocuously augmenting the behavior with something like counting calls or logging them to a file.

Deletion of getattr *does* create problems for CPython (or any interpreter) in that legal Python code using getattr no longer runs. I presume CPython can limp along and execute other code because it directly calls the C function wrapped by the __builtins__.getattr object.
History
Date User Action Args
2022-04-11 14:57:31adminsetgithub: 59318
2012-07-18 11:13:00r.david.murraylinkissue15383 superseder
2012-06-20 18:36:34terry.reedysetresolution: wont fix -> not a bug
messages: + msg163290
2012-06-20 14:03:06r.david.murraysetstatus: open -> closed
2012-06-20 12:35:40amaury.forgeotdarcsetstatus: pending -> open
nosy: + amaury.forgeotdarc
messages: + msg163272

2012-06-20 12:34:19r.david.murraysetstatus: open -> pending

type: behavior

nosy: + r.david.murray, terry.reedy
messages: + msg163271
resolution: wont fix
stage: resolved
2012-06-20 12:04:02Ramchandra Aptesetmessages: + msg163268
2012-06-20 12:03:37Ramchandra Aptesetmessages: + msg163267
2012-06-20 06:18:05loewissetnosy: + loewis
messages: + msg163257
2012-06-20 06:08:31Ramchandra Aptesetmessages: + msg163256
2012-06-20 06:05:21Ramchandra Aptesetmessages: + msg163255
2012-06-20 06:03:51Ramchandra Aptecreate