[kupfer: 11/13] plugin.google_translate: Use and catch specific exceptions



commit 750cc50623560f67000bed2263d232bd6a06e416
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Sat Oct 31 15:37:52 2009 +0100

    plugin.google_translate: Use and catch specific exceptions
    
    In Python 2.5, GeneratorExit inherits from Exception, so we get errors
    like these:
    
        Exception exceptions.RuntimeError: 'generator ignored GeneratorExit'
        in <generator object at 0x10fda418> ignored
    
    GeneratorExit is raised inside the generator when it is deleted before
    it finishes, so that our finally: clause runs.
    
    We fix this to only catch HTTPException and ValueError (the latter
    which we use internally).
    
    This problem does not occur in Python 2.6, where GeneratorExit only
    inherits BaseException.

 kupfer/plugin/google_translate.py |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)
---
diff --git a/kupfer/plugin/google_translate.py b/kupfer/plugin/google_translate.py
index 0946555..3a265e8 100644
--- a/kupfer/plugin/google_translate.py
+++ b/kupfer/plugin/google_translate.py
@@ -54,7 +54,8 @@ def _translate(text, lang):
 		conn.request("POST", _GOOGLE_TRANSLATE_PATH, query_param, _HEADER)
 		resp = conn.getresponse()
 		if resp.status != 200:
-			raise Exception('invalid response %d, %s' % resp.status, resp.reason)
+			raise ValueError('invalid response %d, %s' % resp.status,
+					resp.reason)
 
 		response_data = resp.read()
 		encoding = _parse_encoding_header(resp)
@@ -70,7 +71,7 @@ def _translate(text, lang):
 				for translation in other[1:]:
 					yield translation, other[0]
 
-	except Exception, err:
+	except (httplib.HTTPException, ValueError), err:
 		pretty.print_error(__name__, '_translate error', repr(text), lang, err)
 		yield  _("Error connecting to Google Translate"), ""
 
@@ -95,7 +96,8 @@ def _load_languages():
 		conn.request("GET", _GOOGLE_TRANS_LANG_PATH, headers=headers)
 		resp = conn.getresponse()
 		if resp.status != 200:
-			raise Exception('invalid response %d, %s' % resp.status, resp.reason)
+			raise ValueError('invalid response %d, %s' % resp.status,
+					resp.reason)
 		
 		result = resp.read().decode(_parse_encoding_header(resp), "replace")
 		result = result[result.index('select name=tl'):]
@@ -103,7 +105,7 @@ def _load_languages():
 		for key, name in _RE_GET_LANG.findall(result):
 			yield key, name
 
-	except Exception, err:
+	except (httplib.HTTPException, ValueError), err:
 		pretty.print_error(__name__, '_load_languages error', type(err), err)
 		yield 'en', 'English'
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]