(original) (raw)
changeset: 73361:d90d88380aca parent: 73356:b3543ef9b445 parent: 73360:931ae170e51c user: Petri Lehtinen petri@digip.org date: Fri Nov 04 22:21:52 2011 +0200 files: Lib/test/test_locale.py Misc/ACKS Misc/NEWS description: Issue #3067: Fix the error raised by locale.setlocale() diff -r b3543ef9b445 -r d90d88380aca Lib/locale.py --- a/Lib/locale.py Fri Nov 04 20:54:05 2011 +0100 +++ b/Lib/locale.py Fri Nov 04 22:21:52 2011 +0200 @@ -440,13 +440,17 @@ No aliasing or normalizing takes place. """ - language, encoding = localetuple - if language is None: - language = 'C' - if encoding is None: - return language - else: - return language + '.' + encoding + try: + language, encoding = localetuple + + if language is None: + language = 'C' + if encoding is None: + return language + else: + return language + '.' + encoding + except (TypeError, ValueError): + raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.') def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): diff -r b3543ef9b445 -r d90d88380aca Lib/test/test_locale.py --- a/Lib/test/test_locale.py Fri Nov 04 20:54:05 2011 +0100 +++ b/Lib/test/test_locale.py Fri Nov 04 22:21:52 2011 +0200 @@ -409,6 +409,14 @@ locale.setlocale(locale.LC_CTYPE, loc) self.assertEqual(loc, locale.getlocale(locale.LC_CTYPE)) + def test_invalid_locale_format_in_localetuple(self): + with self.assertRaises(TypeError): + locale.setlocale(locale.LC_ALL, b'fi_FI') + + def test_invalid_iterable_in_localetuple(self): + with self.assertRaises(TypeError): + locale.setlocale(locale.LC_ALL, (b'not', b'valid')) + def test_main(): tests = [ diff -r b3543ef9b445 -r d90d88380aca Misc/ACKS --- a/Misc/ACKS Fri Nov 04 20:54:05 2011 +0100 +++ b/Misc/ACKS Fri Nov 04 22:21:52 2011 +0200 @@ -768,6 +768,7 @@ Amrit Prem Paul Prescod Donovan Preston +Jyrki Pulliainen Steve Purcell Fernando Pérez Eduardo Pérez diff -r b3543ef9b445 -r d90d88380aca Misc/NEWS --- a/Misc/NEWS Fri Nov 04 20:54:05 2011 +0100 +++ b/Misc/NEWS Fri Nov 04 22:21:52 2011 +0200 @@ -350,6 +350,9 @@ Library ------- +- Issue #3067: locale.setlocale() now raises TypeError if the second + argument is an invalid iterable. Initial patch by Jyrki Pulliainen. + - Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn. - Issue #13339: Fix compile error in posixmodule.c due to missing semicolon. /petri@digip.org