diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2012-06-03 05:06:38 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2012-06-03 05:06:38 (GMT) |
commit | a317eef8975f8ffef0938be32e5c85dc0bd3076f (patch) | |
tree | c4b506656cbd4b15c76a97ba5e3430488ce7449f /Lib/idlelib | |
parent | 11cfea92950eda064e9b5b7048c1951bb084fc43 (diff) | |
parent | e606e238ab1476251ef377710442315017e4eb86 (diff) | |
download | cpython-a317eef8975f8ffef0938be32e5c85dc0bd3076f.zip cpython-a317eef8975f8ffef0938be32e5c85dc0bd3076f.tar.gz cpython-a317eef8975f8ffef0938be32e5c85dc0bd3076f.tar.bz2 |
Merge with 3.2 #12510
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/CallTips.py | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/Lib/idlelib/CallTips.py b/Lib/idlelib/CallTips.py index aa796cb..22a8a29 100644 --- a/Lib/idlelib/CallTips.py +++ b/Lib/idlelib/CallTips.py @@ -67,18 +67,18 @@ class CallTips: if not sur_paren: return hp.set_index(sur_paren[0]) - name = hp.get_expression() - if not name: + expression = hp.get_expression() + if not expression: return - if not evalfuncs and (name.find('(') != -1): + if not evalfuncs and (expression.find('(') != -1): return - argspec = self.fetch_tip(name) + argspec = self.fetch_tip(expression) if not argspec: return self.active_calltip = self._calltip_window() self.active_calltip.showtip(argspec, sur_paren[0], sur_paren[1]) - def fetch_tip(self, name): + def fetch_tip(self, expression): """Return the argument list and docstring of a function or class. If there is a Python subprocess, get the calltip there. Otherwise, @@ -94,25 +94,27 @@ class CallTips: """ try: rpcclt = self.editwin.flist.pyshell.interp.rpcclt - except: + except AttributeError: rpcclt = None if rpcclt: return rpcclt.remotecall("exec", "get_the_calltip", - (name,), {}) + (expression,), {}) else: - entity = self.get_entity(name) + entity = self.get_entity(expression) return get_argspec(entity) - def get_entity(self, name): - "Lookup name in a namespace spanning sys.modules and __main.dict__." - if name: + def get_entity(self, expression): + """Return the object corresponding to expression evaluated + in a namespace spanning sys.modules and __main.dict__. + """ + if expression: namespace = sys.modules.copy() namespace.update(__main__.__dict__) try: - return eval(name, namespace) - # any exception is possible if evalfuncs True in open_calltip - # at least Syntax, Name, Attribute, Index, and Key E. if not - except: + return eval(expression, namespace) + except BaseException: + # An uncaught exception closes idle, and eval can raise any + # exception, especially if user classes are involved. return None def _find_constructor(class_ob): |