From 8a036c68db696aeb2432d4604534bffdf36c1bb8 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Thu, 5 Sep 2019 18:57:10 -0700 Subject: [PATCH 1/4] catch more specific --- pandas/_config/display.py | 5 ++++- pandas/_config/localization.py | 2 +- pandas/tests/io/formats/test_console.py | 8 +++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pandas/_config/display.py b/pandas/_config/display.py index 6e5fabe2706e5..067b7c503baab 100644 --- a/pandas/_config/display.py +++ b/pandas/_config/display.py @@ -28,7 +28,10 @@ def detect_console_encoding(): if not encoding or "ascii" in encoding.lower(): try: encoding = locale.getpreferredencoding() - except Exception: + except locale.Error: + # can be raised by locale.setlocale(), which is + # called by getpreferredencoding + # (on some systems, see stdlib locale docs) pass # when all else fails. this will usually be "ascii" diff --git a/pandas/_config/localization.py b/pandas/_config/localization.py index 46802c6460959..5bbe70750728d 100644 --- a/pandas/_config/localization.py +++ b/pandas/_config/localization.py @@ -139,7 +139,7 @@ def get_locales(prefix=None, normalize=True, locale_getter=_default_locale_gette """ try: raw_locales = locale_getter() - except Exception: + except subprocess.CalledProcessError: return None try: diff --git a/pandas/tests/io/formats/test_console.py b/pandas/tests/io/formats/test_console.py index f4bee99296a83..e56d14885f11e 100644 --- a/pandas/tests/io/formats/test_console.py +++ b/pandas/tests/io/formats/test_console.py @@ -1,3 +1,5 @@ +import locale + import pytest from pandas._config import detect_console_encoding @@ -50,11 +52,11 @@ def test_detect_console_encoding_fallback_to_locale(monkeypatch, encoding): "std,locale", [ ["ascii", "ascii"], - ["ascii", Exception], + ["ascii", locale.Error], [AttributeError, "ascii"], - [AttributeError, Exception], + [AttributeError, locale.Error], [IOError, "ascii"], - [IOError, Exception], + [IOError, locale.Error], ], ) def test_detect_console_encoding_fallback_to_default(monkeypatch, std, locale): From d1a7fe1909618be99e7fc8b1dd44b83b024aaa02 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 6 Sep 2019 09:18:34 -0700 Subject: [PATCH 2/4] Fix instantiation of CalledProcessError --- pandas/_config/localization.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pandas/_config/localization.py b/pandas/_config/localization.py index 5bbe70750728d..86de581a2b996 100644 --- a/pandas/_config/localization.py +++ b/pandas/_config/localization.py @@ -100,10 +100,13 @@ def _valid_locales(locales, normalize): def _default_locale_getter(): try: raw_locales = subprocess.check_output(["locale -a"], shell=True) - except subprocess.CalledProcessError as e: - raise type(e)( - "{exception}, the 'locale -a' command cannot be found " - "on your system".format(exception=e) + except subprocess.CalledProcessError as err: + # "locale -a" is not (always?) defined on Windows + raise type(err)( + returncode=errr.returncode, + cmd=err.cmd, + output="{exception}, the 'locale -a' command cannot be found " + "on your system".format(exception=err) ) return raw_locales From ddb182e4a8913eb9135f813d3f5bb4f11ddd3fad Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 6 Sep 2019 09:52:40 -0700 Subject: [PATCH 3/4] typo, blackify --- pandas/_config/localization.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/_config/localization.py b/pandas/_config/localization.py index 86de581a2b996..ff8dc79f08f67 100644 --- a/pandas/_config/localization.py +++ b/pandas/_config/localization.py @@ -103,10 +103,10 @@ def _default_locale_getter(): except subprocess.CalledProcessError as err: # "locale -a" is not (always?) defined on Windows raise type(err)( - returncode=errr.returncode, + returncode=err.returncode, cmd=err.cmd, output="{exception}, the 'locale -a' command cannot be found " - "on your system".format(exception=err) + "on your system".format(exception=err), ) return raw_locales From 7abf4467f92c63d4d6ac7b84071d4cb31b8114bf Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 6 Sep 2019 14:17:03 -0700 Subject: [PATCH 4/4] no need to re-raise --- pandas/_config/localization.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/pandas/_config/localization.py b/pandas/_config/localization.py index ff8dc79f08f67..9f750d8447c6a 100644 --- a/pandas/_config/localization.py +++ b/pandas/_config/localization.py @@ -98,16 +98,7 @@ def _valid_locales(locales, normalize): def _default_locale_getter(): - try: - raw_locales = subprocess.check_output(["locale -a"], shell=True) - except subprocess.CalledProcessError as err: - # "locale -a" is not (always?) defined on Windows - raise type(err)( - returncode=err.returncode, - cmd=err.cmd, - output="{exception}, the 'locale -a' command cannot be found " - "on your system".format(exception=err), - ) + raw_locales = subprocess.check_output(["locale -a"], shell=True) return raw_locales @@ -143,6 +134,8 @@ def get_locales(prefix=None, normalize=True, locale_getter=_default_locale_gette try: raw_locales = locale_getter() except subprocess.CalledProcessError: + # Raised on (some? all?) Windows platforms because Note: "locale -a" + # is not defined return None try: