New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IDLE Shell: delattr(__builtins__,"getattr") causes shell to stop working #59318
Comments
delattr(builtins,"getattr") causes shell to stop working 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 |
Running the delattr(builtins,"getattr") in Python from the cmd line doesn't create any problems though. |
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). |
Why do you think this is a bug? It is expected behavior. |
IDLE should try to mimic Python as much as feasible. |
s/Python/Python in cmd |
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. |
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... |
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. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: