From 483f5c14eee59761613993772f82db16c1703932 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 7 Aug 2014 16:27:42 +0200 Subject: [PATCH] Listeneres should be removed even in exception cases. Do a 'finally' cleanup. --- jedi/evaluate/dynamic.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/jedi/evaluate/dynamic.py b/jedi/evaluate/dynamic.py index 787513ea..aa53a8d3 100644 --- a/jedi/evaluate/dynamic.py +++ b/jedi/evaluate/dynamic.py @@ -145,14 +145,15 @@ def search_params(evaluator, param): listener = ParamListener() func.listeners.add(listener) - result = [] - # This is like backtracking: Get the first possible result. - for mod in imports.get_modules_containing_name([current_module], func_name): - result = get_params_for_module(mod) - if result: - break - - # cleanup: remove the listener; important: should not stick. - func.listeners.remove(listener) + try: + result = [] + # This is like backtracking: Get the first possible result. + for mod in imports.get_modules_containing_name([current_module], func_name): + result = get_params_for_module(mod) + if result: + break + finally: + # cleanup: remove the listener; important: should not stick. + func.listeners.remove(listener) return result