Terry J. Reedy <tjre...@udel.edu> added the comment:

Since isinstance(Object.__call__, types.MethodType) is False, the 'fob' in 
'inspect.signature(fob)' is Object.  (See the initial get_argspec code.)  
Indeed, 'inspect.signature(Object)' results in the traceback following 
inspect.signature(fob) and 'isinstance(Object, types.MethodType)' results in 
the last line thereof.  Not returning 'False' strikes me as maybe a bug in 
'isinstance'.  Have you opened a report for this?  

Directly importing and executing  idlelib code is not supported (its is 
'private'), but entering 'Object(' to cause IDLE to make the same call is.  And 
the result is worse than the exception.  The IDLE gui process hangs, waiting 
for the response from the socket connection to the user code process that never 
comes.  This is clearly a bug, regardless of whether the user code is buggy.

The relevant section of get_argspec is

    try:
        argspec = str(inspect.signature(fob))
    except ValueError as err:
        msg = str(err)
        if msg.startswith(_invalid_method):
            return _invalid_method

Signature() is documented as returning either ValueError or TypeError, and with 
the 'bug' in isinstance, others are possible.  So any error should be caught.  
(The default of falling through and checking for a docstring signature is 
correct.)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue38689>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to